String类
构造方法
- String s = “xxx”;
- String s = new String(“xxx”);
- String s = new String(char数组);
- String s = new String(char数组,起始下标,长度);
- String s = new String(byte数组);
- String s = new String(byte数组,起始下标,长度);
byte[] b = {97,98,99};
String st = new String(b);//abc
String st2 = new String(b,1,2);//bc,byte数组一部分转换成字符串
char[] c = {'我','是','谁'};
String st3 = new String(c);//我是谁
String st4 = new String(c,2,1);//谁
21种常用方法
charAt(下标);【返回下标的值】
compareTo(); 字符串比较【返回值为int类型】
- -1或1:拿着两个字符串的第一个比较,能比出大小,后面就不比了
- 0:两个字符串相等
equals(“xxx”);判断两个字符串是否相等
equalsIgnoreCase(“xxx”);
contains(“xxx”);判断是否包含xxx【true或false】
startsWith(“xxx”);判断是否以xxx开始
endsWith(“xxx”);判断是否以xxx结尾【true或false】
isEmpty();判断是否为空串【true或false】
getBytes(“xxxx”);转换成byte数组【返回byte数组】
toCharArray();将字符串转换成char数组
toLowerCase();转换成小写
toUpperCase();转换成大写
length()方法判断数组长度
indexOf(“xxx”);xxx在字符串中第一次出现的下标
lastIndexOf(“xxx”);判断xxx在字符串中最后一次出现的下标
replace(newchar,oldchar);用newchar替换所有oldchar
split("-");将字符串以"-"拆分,返回String[]
subString(起始下标);截取字符串
subString(起始下标,结束下标);//不包含结束下标的字符
trim();去除字符串前后空白
String st = String.valueOf(); String中唯一的静态方法:将非字符串转换成字符串
字符串拼接
当频繁进行字符串拼接时
java的字符串是不可变的,每次拼接都会产生新的字符串,这样会占用大量的方法区内存。
使用”+“拼接,会产生很多冗余
String a = "abc";
s += "def";
//以上两行代码会在方法区产生三个字符串对象:”abc“,”def“,”abcdef“
改进:
使用字符串缓冲区对象:StringBuffer,多线程下安全
StringBuffer sb = new StringBuffer();
sb.append("xxx");//追加
底层时byte数组,初始化容量是16.
StringBuilder,多线程下不安全
StringBuilder sb = new StringBuilder();
sp.append("xxx");