字符串
String 类 引用类型 默认值:null
字符串的声明:
String str = “abc你好”;
字符串的拼接
+ 加号在拼接字符串和加法运算时优先级是一样的
字符串和所有类型相加(+)后得到的都是字符串
例如:
str = "123"+"abc";//"123abc"
str = "123"+"23";//"12323"
str = "123"+new Object();//"123"+这个对象的toString的结果
str = "123"+new int[]{1,2,3};
System.out.println(str);
System.out.println("123" + 123 + 123);//输出为123123123
System.out.println(123 + 123 + "123");//输出为246123
字符串比较
使用equals方法比较字符串
例如:
boolean bool = "123".equals("123");//true
String strA = new String("123");
String strB = new String("123");
bool =strA.equals(strB);//true equals检查字符串内容是否一样
System.out.println(bool);
bool = strA==strB;
System.out.println(bool);
String类型中的常用方法
valueOf--将传入的参数转成字符串
例如:
String.valueOf('1');
查找子串出现的位置(index) 找不到返回-1
int index = "123456".indexOf("34");//第一个字符出现的位置
System.out.println(index);
想找最后一个要倒着(lastIndexOf)
index = "123123123".lastIndexOf("1");//返回6
System.out.println(index);
获取指定位置的字符 (charAt)
char item ="123456".charAt(4);//会返回5
System.out.println(item);
截取字符串,获取一段字符串(substring)
str = "123456".substring(1);//只有结束位置
System.out.println(str);
str = "123456".substring(1,4);//包含开始位置,不包含结束位置
System.out.println(str);
替换(replace)
str="12345634".replace("34","AA");//"12AA56AA"
System.out.println(str);
str="12。31。23".replaceAll(".","A");//"AAAAAAAA" .在这里表示任意字符
System.out.println(str);
分割字符串(split)
String[] strArr = "123123123".split("2");//输出为"1, 31, 31, 3"
//切割点在前面前面会有一个空串,在后面则不管
String[] strArr = "1231231231".split("1");//输出为",23,23,23"
获取字符串长度(length)
int l = "123123".length();
去除前后空白位(trim)
可以去除 空格 \n \r \t
之可以去除前后的,中间的不会被去除
例如:
String strC = "\n\r A12 SS \n 388 ";
System.out.println(strC);
System.out.println("==-----------------------");
System.out.println(strC.trim());
System.out.println("==-----------------------");
针对字母的大写(toUpperCase)
String str = "123abc".toUpperCase();
System.out.println(str);
针对字母的小写(toLowerCase)
String str = "123ABCabc".toLowerCase();
System.out.println(str);
判断是否是空串(isEmpty)
Boolean bool= "123".isEmpty();//是空返回true 不是空返回false
System.out.println(bool);
是否从指定的字符开始(startsWith)
"123456".startsWith("1");//true 是否从1开始
是否以指定字符结束(endsWith)
"123456".endsWith("6");//false 是否是到6结束
String 对象 定义后就不可改变 或者说定义的量都是常量
private final 修饰value数组
字符串怎样加入到常量池中----使用量的方式生命的字符串就会加入到常量池中
int a = 12;
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
Intern
返回 str对象在字符串常量池中的副本对象
过程:检查str是否在字符串常量池中存在副本,如果不存在就复制一份存入到常量池中
然后返回常量池中的副本对象
如果已经存在副本对象,直接返回副本对象
所以 两个字符串 equals 为true
name 两个字符串的intern方法==
strA = new String("123123");
strB = new String("123123");
System.out.println(strA.equals(strB));//true
System.out.println(strA==strB);//false
System.out.println(strA.intern()==strB.intern());//ture
如何在排列用String定义的字符串时不生成中间串
StringBuilder(线程不安全但效率快) StringBuffer(线程安全但效率慢)
两者方法并无太大区别所以只用StringBuilder的方法演示
StringBuilder strB = new StringBuilder();
strB.append("123");
strB.append("abc");
strB.append("456");
往StringBuilder数组中追加字符(append)
其中不会产生字符串对象
System.out.println(strB.toString());
StringBuilder 默认容量是16
StringBuilder 扩容
追加字符时容量不够就需要扩容(value) 默认 原来的容量*2+2 或还不够需要多大给多大
数组复制
数组复制 从哪、第几个、到哪、第几个开始、复制几个
System.arraycopy(src,0,dest,0,23);
Date时间类型
long 表示时间每一毫秒加1 1970-1-1 00:00:00 000
获取当前时间(执行程序时的时间)
Date date = new Date();
System.out.println(date);
显示当前时间的数字即从1970-1-1 00:00:00 000开始每一毫秒加1,到现在总共的数字
long time = date.getTime();
System.out.println(time);
显示一定时间后的时间
time = time+2*24*60*60*1000;
date=new Date(time);
System.out.println(date);
特殊:月份的计数是从0到11
时间格式化(为了符合中国的看时间习惯)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
System.out.println(sdf.format(date));
本地时间显示
LocalDateTime ldf =LocalDateTime.now();
本地时区显示
ZonedDateTime zdt = ZonedDateTime.now();
System.out.println((zdt.getZone()));
真假随机数
假随机数Random
这个的随机数会受到()中种子的影响
Random ranObj=new Random(12);//这个的随机数会受到()中种子的影响
真随机数
double ran = Math.random();//[0,1)随机取一个0~1的数
取整
方法一:四舍五入
long num = Math.round(ranNum);
System.out.println(num);
特殊:int intNum=Math.round(12.33f);//如果数是flout类型的返回值是int
方法二:向上取整
double ceilNum = Math.ceil(ranNum);
System.out.println(ceilNum);
方法三:向下取整
double floorNum = Math.floor(ranNum);
System.out.println(floorNum);