package com.jp.date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.junit.Test;
/*
* 与时间相关的类
* 1.System
* 2.Date
* 3.SimpleDateFormat
* 4.Calendar
*/
public class DateDemo {
@Test
public void testSystem(){
long start = System.currentTimeMillis();
for(int i=0; i<10000; i++){
for(int j=0; j<10000; j++){
}
}
long end = System.currentTimeMillis();
System.out.println(end - start);
}
@Test
public void testDate(){
Date d = new Date();//当前的时间对象,1549969447319
System.out.println(d);
//1.日期对象 -->毫秒值 getTime()
long time = d.getTime();
//2.毫秒值 --> 日期对象 构造函数
Date dd = new Date(1549969447319L);
System.out.println(dd);
}
@Test
public void testSimpleDateFormat() throws ParseException{
Date d = new Date();
//需要格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy--MM--dd HH-mm-ss");
//1.把日期对象转换成自定义格式的文本
String format = sdf.format(d);
String str = "2019*2*12---19:15:02";
SimpleDateFormat sf = new SimpleDateFormat("yyyy*MM*dd---HH:mm:ss");
//2.把指定格式的日期文本转换成日期对象
Date parse = sf.parse(str);
System.out.println(parse);
}
@Test
public void testCalendar(){
Calendar c = Calendar.getInstance();
//int i = c.get(Calendar.DAY_OF_MONTH);
// c.set(Calendar.DAY_OF_MONTH, 2);
c.add(Calendar.DAY_OF_MONTH, -2);
Date d = c.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String format = sdf.format(d);
System.out.println(format);
}
}
package com.jp.math;
import org.junit.Test;
public class MathDemo {
@Test
public void testMath(){
/*
* Math:用于执行基本数学运算的方法
*
* Math.E e
*
* Math.PI π
*
* Math.floor(1.6);//向下取整
* Math.ceil(1.3);//向上取整
* Math.round(1.5);//四舍五入
* Math.random();//随即生成数
*/
double floor = Math.floor(-0.9);//向下取整
double ceil = Math.ceil(1.3);//向上取整
long round = Math.round(1.5);//四舍五入
for(int i=0; i<20; i++){
double random = Math.random();//随即生成数,0.0-1.0之间,包含0.0-,不包含1.0
System.out.println(random);
}
//随即生成一个1-10之间的数 1,2,3,4,5,6
myRandom();
}
private void myRandom() {
for(int i=0; i<10; i++){
System.out.println((int)Math.floor(Math.random()*10 + 1));
}
}
}
package com.jp.string;
import org.junit.Test;
public class StringDemo {
@Test
public void testConstructor(){
//4.
String str5 = "java";
//1.把字符串数据转成字符串对象
String str1 = new String("java");
System.out.println(str1 == str5);//false
System.out.println(str1.equals(str5));//true
//2.把字符数组转成字符串对象
char[] values = {'j','a', 'v', 'a'};
String str2 = new String(values);
//把字符数组中的一部分转成字符串对象
String str3 = new String(values, 1, 2);
//3.把字节数组转成字符串对象
byte[] bytes = {97,98,99,100};
String str4 = new String(bytes);
//System.out.println(str4);
}
@Test
public void testPractice(){
String str1 = "java";
String str2 = "python";
String str3 = str1 + str2;
String str4 = "javapython";
System.out.println(str3 == str4);//false
System.out.println(str3.equals(str4));//true
}
}
package com.jp.string;
import org.junit.Test;
public class StringDemo2 {
/*
*
* 1.判断功能
* equals(Object o) 比较字符串的内容是否相同
* equalsIgnoreCase(String another) 比较字符串的内容是否相同,忽略大小写
* startsWith(String str) 是否以指定字符串开头
* endsWith(String str)是否以指定字符串结尾
* contains(charSequece c) 是否包含指定字符串
*/
@Test
public void test1(){
String str1 = "abc";
String str2 = "ABC";
// System.out.println(str1.equalsIgnoreCase(str2));
System.out.println(str1.contains("b"));
}
/*
* 2.获取功能
* length() 返回字符串长度
* charAt(int index) 根据位置获取字符
* indexOf(String str)获取字符串首次出现的位置
* indexOf(String str, int from)获取字符串在指定位置开始,首次出现的位置
* indexOf(int ch)获取字符首次出现的位置
* indexOf(int ch, int from)获取字符在指定位置开始,首次出现的位置
*
* lastIndexOf(String str)获取字符串最后一次出现的位置
* lastIndexOf(String str, int from)获取字符串在指定位置开始,最后一次出现的位置
* lastIndexOf(int ch)获取字符最后一次出现的位置
* lastIndexOf(int ch, int from)获取字符在指定位置开始,最后一次出现的位置
*
* 截串
* substring(int begin) 从begin开始,一直到末尾
* substring(int begin ,int end) 含头部含尾
*/
@Test
public void test2(){
String str = "abac";
// System.out.println(str.length());
// System.out.println(str.charAt(0));
// System.out.println(str.indexOf("a"));
//int indexOf = str.indexOf("a", 3);
// int indexOf = str.indexOf('a', 1);
// int lastIndexOf = str.lastIndexOf("c");
String substring = str.substring(1);
String substring2 = str.substring(1, 3);
System.out.println(substring2);
}
/*
* 3.转换功能
* toCharArray() 字符串转成字符数组
* str.getBytes();根据系统默认码表转成字节数组
str.getBytes(String charSetName); 根据指定码表转成字节数组
toUpperCase() 小写转大写
toLowerCase() 大写转小写
trim() 去除字符串两边的空格、
concat(String str) 拼接字符串
replace(String old, String new) 新替旧
replace(char old, char new) 新替旧
split(String regex) 以指定字符串切割,返回字符串数组 (正则表达式)
*/
@Test
public void test3(){
// String str = " ABC DEFG ";
// //char[] charArray = str.toCharArray();
// //String upperCase = str.toLowerCase();
// String trim = str.trim();
// String concat = trim.concat("xxx");
System.out.println(concat);
//
// String replace = str.replace("D", "ww");
//
// System.out.println(replace);
String str = "a,b,c,d,e,f";
String[] split = str.split(",");
for(String ss : split){
System.out.println(ss);
}
}
}
package com.jp.string;
public class StringTest01 {
public static void main(String[] args) {
String[] strs = { "abc", "ab", "abcde", "a" };
printArr(strs);
//排序
sort(strs);
printArr(strs);
}
//按字典顺序从小到大排序
private static void sort(String[] strs) {
for(int i=0; i<strs.length-1; i++){
for(int j=i+1; j<strs.length; j++){
if((strs[i].compareTo(strs[j])) > 0){
//换位置
swap(strs,i,j);
}
}
}
}
//交换数组中两个位置
private static void swap(String[] arr, int from, int to){
String temp = arr[from];
arr[from] = arr[to];
arr[to] = temp;
}
private static void printArr(String[] strs) {
System.out.print("[");
for (int i = 0; i < strs.length; i++) {
if(i != strs.length-1){
System.out.print(strs[i] + ",");
}else{
System.out.println(strs[i] + "]");
}
}
}
}
package com.jp.string;
public class StringTest02 {
public static void main(String[] args) {
String str = "abcjpdefjpxxjpopdsfjpsdfasjp";
String subStr = "jp";
int count = getCount(str, subStr);
System.out.println(count);
}
private static int getCount(String str, String subStr) {
// 1.记录次数
int count = 0;
// 2.记录subStr首次出现的位置
int start = 0;
while ((start = str.indexOf(subStr)) != -1) {
str = str.substring(start + subStr.length());
count++;
}
return count;
}
}
package com.jp.string;
public class StringTest03 {
public static void main(String[] args) {
String str1 = "abcdefghijk";
String str2 = "wqcdefpm";
String max = getMaxString(str2, str1);
System.out.println(max);
}
private static String getMaxString(String str1, String str2) {
String max = null;
String min = null;
max = (str1.length()>str2.length())? str1 : str2;
min = (str1.length()<str2.length())? str1 : str2;
for(int i=0; i<min.length(); i++){
for(int x=0, y=min.length()-i; y!=min.length() + 1; x++,y++){
String substring = min.substring(x,y);
if(max.contains(substring)){
return substring;
}
}
}
return null;
}
}
package com.jp.string;
public class StringTest04 {
public static void main(String[] args) {
String str = " x yw ";
String ss = myTrim(str);
System.out.println(ss);
}
private static String myTrim(String str) {
int start = 0;
int end = str.length() - 1;
while(start <= end && str.charAt(start) == ' '){
start++;
}
while(start <= end && str.charAt(end) == ' '){
end--;
}
return str.substring(start, end + 1);
}
}
package com.jp.stringbuffer;
public class StringBufferDemo {
public static void main(String[] args) {
/*
* StringBuffer:字符串缓冲区
* 用于存储数据的容器
*
* 特点:
* 1.长度可变
* 2.存储不同类型的数据
* 3.最终都要转成字符串进行使用
* 4.可以对字符串进行修改
*
* 这个容器的具有哪些功能呢?
*
* 1.添加
* append(obj)
* insert(idnex, obj)
* 2.修改
* sb.replace(start, end, str); 替换多个
* sb.setCharAt(index, char); 替换单个
* 3.删除
* sb.deleteCharAt(index);删除单个
* sb.delete(start, end);删除多个
* 4.查找
* char charAt = sb.charAt(index); 查找单个
* int indexOf = sb.indexOf(str);
* int indexOf = sb.lastIndexOf(str);
*/
StringBuffer sb = new StringBuffer();
sb.append("a").append("xx").append(true);
sb.insert(0, false);
System.out.println(sb.toString());
//sb.replace(0, 2, "w");
//sb.setCharAt(0, 'p');
//sb.deleteCharAt(0);
//sb.delete(0, 2);
//char charAt = sb.charAt(0);
int indexOf = sb.lastIndexOf("x");
System.out.println(indexOf);
/*
* StringBuilder jdk1.5版本之后出现的,和StrinbBuffer功能一样
*
* 不同:
* StrinbBuffer 线程安全的 ,用于多线程
* StringBuilder 线程不安全的,用于单线程
*
*/
}
}
String StringBuffer StrinBuilder
String:字符串常量, 对象已创建不可更改
StringBuffer StringBuilder:字符串变量,对象创建完之后,可以更改
String str = “abc”;
System.out.println(str); //abc
str = str + “de”;
System.out.println(str); //abcde
1.运行速度
2.线程安全问题
少量的字符串操作 String
多线程大量的对字符串进行操作 StringBuffer
单线程大量的对字符串进行操作 StringBuilder
效率:
StringBuilder > StringBuffer > String