字符串
String类 引用类型 默认值为null
String str = "abc你好";//声明字符串
字符串的拼接
//"+"在拼接字符串时优先级是一样的
System.out.println("123"+123+123);//123123123
System.out.println(123+123+"123");//246123
//字符串和所有类型拼接(+)后得到的都是字符串
str = "123"+"abc";//123abc
str = "123"+23;//12323
str = "123"+new Object();//"123"+这个对象的toString的结果
str = "123"+new int[]{1,2,3};//"123"+数组地址
String类型中的常用方法
equals 字符串比较
boolean bool = "123".equals("123");//true
bool = new String("123").equals(new String("123"));//true
valueOf 将传入的参数转成字符
String.valueOf();
indexOf 查找子串出现的位置(index)找不到返回-1
int index = "123456".indexOf("34");//2
index = "123123123".indexOf("4");//-1
lastIndexOf 查找子串最后出现的位置(index)找不到返回-1
int index = "123123123".lastIndexOf("1");//6
charAt 获取指定位置的字符
char item = "123a456".charAt(3);//'a'
substring 截取字符串
String str;
str = "123456".substring(1);//'23456'
str = "123456".substring(1,4);//'234' 包含开始下标,不包含结束下标
replace 替换
str = "12345634".replace("34","AAA");//"12AAA56AAA"
str = "12.31.23".replaceAll(".","A");//'.'此处代表任意字符,为正则表达式 "AAAAAAAA"
split 分割字符串
String[] strArr = "1231231231".split("1");
System.out.println(Arrays.toString(strArr));//[,23,23,23]在字符串头会变为",",字符串尾不会
trim 去除前后空白位 空格 \n \r \t
String strC ="\n\r \t 123 \n\r" ;
System.out.println(strC);
System.out.println("--------------------------------------------------");
System.out.println(strC.trim());"123"
toLowerCase 字母小写
strNull = "123ABCabc".toLowerCase();
System.out.println(strNull);//"123abcabc"
toUpperCase 字母大写
strNull = "123abc".toUpperCase();
System.out.println(strNull);//"123ABC"
isEmpty 判断是否是空串
bool = "123".isEmpty();//不是空串 返回false
startsWith判断是否以某个字符串开始
"123456".startsWith("123");//ture
endsWith判断是否以某个字符串结束
"123456".endsWith("65");//false
字符串常量池
public class EasyStringB {
public static void main(String[] args) {
//String 对象 定义后就不可改变(常量) 使用private final修饰value数组
//字符串常量池 池 容器---->重用
//字符串怎样加入到常量池中----使用量的方式声明的字符串就会加入到常量池
String str = "abc";//加入到常量池
Integer.valueOf("23");
char[] arr = {'a', 'b', 'c'};
str = new String(arr);
//程序中第一次使用量的形式定义"123",会将这个字符串存入<字符串常量池>
//之后再使用量的形式使用该对象,就执行使用常量池中的对象
String strA = "123";
String strB = "123";
System.out.println(strA == strB);//true
String strC = new String("123");
String strD = new String("123");
System.out.println(strA == strC);//false
System.out.println(strC == strD);//false
//常量编译优化
String strE = "12"+"3";
String strF = "1"+"2"+"3";
String item = "12";//变量
String strG = item+"3";
String strGG = item+3;
System.out.println((strG == strGG)+"---------------------");//false
//str()+"3"
String strH = "12"+3;
System.out.println(strA == strE);//true
System.out.println(strA == strF);//true
System.out.println(strE == strF);//true
System.out.println(strA == strG);//false
System.out.println(strA == strH);//ture
System.out.println(strG == strC);//false
final String aa = "12";
String strI = aa+"3";
System.out.println(strA == strI);//ture
final String bb = new String("12");
String strJ = bb+"3";
System.out.println(strA == strJ);//false
//inter
str.intern();
//返回 str对象在字符串常量池中的副本对象
//过程:检查str是否在字符串常量池中存在副本,如果不存在就复制一份存入到常量池中
//然后返回常量池中的副本对象
//如果已经存在副本对象,直接返回副本对象
//所以 两个字符串 equals 为true
//那么 两个字符串的inter方法==
strA = new String("123123");
strB = new String("123123");
System.out.println(strA.equals(strB));//ture
System.out.println(strA == strB);//false
System.out.println(strA.intern() == strB.intern());//true
//new String("abc") 创建了几个对象? 一个或两个(有副本一个,没副本两个)
}
StringBuffer/StringBuilder
import java.util.Objects;
public class EasyStringbuilder {
public static void main(String[] args) {
//String字符串定义后就不可改变 存在常量池中
String str="";
for(int i=0;i<10;i++){
str+=i;
}//0 01 012 0123 01234 …… 0123456789
//在拼接字符串时不要产生中间串 StringBuilder(效率高) StringBuffer(线程安全)
StringBuilder strB=new StringBuilder();
strB.append("123");
strB.append("abc");
strB.append("456");
//调用append 往StringBuilder数组中追加字符
//其中没有产生字符串对象
System.out.println(strB.toString());
//StringBuilder 默认容量是 16
//StringBuilder 扩容
//追加字符时容量不够就需要扩容(value) 默认 原来容量*2+2,如果还不够就等于需要的最小容量
//数组复制
//System.arraycopy(src,0,dest,0,23);将src数组里从索引为0的元素开始,
//复制到数组dest里的索引为0的位置, 复制的元素个数为23个.
Objects.isNull(null);//true
Objects.equals(str,"123");//false
}
}
Date 日期,时间
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.util.Date;
public class EasyDate {
//long 1970-1-1 00:00:00 000
//时间类型 Date
public static void main(String[] args) {
//获取当前时间 --执行时时间
Date date = new Date(0);
System.out.println(date);
long time = date.getTime();
System.out.println(time);
time=time+2*24*60*60*1000;
date=new Date(time);
System.out.println(date);
date.getMonth();//月份 0~11
//格式化时间显示
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
String sdfStr = sdf.format(date);
System.out.println(sdfStr);
LocalDateTime ldt = LocalDateTime.now();//本地时间
ZonedDateTime zdt = ZonedDateTime.now();
Object obj = zdt.getZone();//获取时区
System.out.println(obj);
}
}
Math
round 取整 四舍五入
//取整 四舍五入
ranNum = 12.5;
long num = Math.round(ranNum);//13 返回long
Math.round(12.33f);//12 返回int
ceil 向上取整
double ceilNum = Math.ceil(ranNum);
System.out.println(ceilNum);//13
floor 向下取整
double floorNum = Math.floor(ranNum);
System.out.println(floorNum);//12
random 随机数
真随机
//随机数
double ran = Math.random();//[0,1) 真正随机
//ran*50 0~50 [8~90) (0~82)+8
double ranNum = ran*82+8;
假随机
//随机数对象
Random ranObj = new Random(12);//假随机
Random ranObjN = new Random(12);
int a = ranObj.nextInt();
int b = ranObjN.nextInt();//a==b
System.out.println(a+"=="+b);
a = ranObj.nextInt(200);
b = ranObjN.nextInt(200);
System.out.println(a+"=="+b);//a==b