String类
重点:
new String() --à地址 final,不能被继承
String底层char[]数组 final,不能改变数组内容。
New String(“a”)+new String(“b”)---àStringBuilder
concat 开辟一个两个字符长度的空间,把两个字符串连接在一起
方法:
isEmpty 判空
length()长度,调用数组的属性 length
charAt()在某个索引位置上的字符
substring 以子串
getBytes() 取字节,在操作中文的相关内容
indexOf/lastIndexOf 索引
replace的替换方法
1、所有的修改字符串操作都是不能替换原串的,
2、原理:
底层:replaceAll
实际发生的String的替换方法
public String replaceAll(String replacement) {
reset();
boolean result = find();
if (result) {
StringBuffer sb = new StringBuffer();
do {
appendReplacement(sb, replacement);
result = find();
} while (result);
appendTail(sb);
return sb.toString();
}
return text.toString();
}
实际String的替换底层使用StringBuilder
StringBuilder里面的replace特点,可以指定开始位置和结尾位置进行替换,String里面的replace特点,从字符串开始到字符串结尾遍历查找,查找到调用StringBuilder来替换。
在数组有一些文件名,.doc批量改成.txt
String[] arrs={"aa.doc","bbb.doc","ccc.doc","ddddddd.doc"};
for(int i=0;i<arrs.length;i++){
StringBuilder sb=new StringBuilder(arrs[i]);
int len=arrs[i].length();
//StringBuilder的replace参数,第一个 start开始,第二个是结束,第一个替换的字符串
sb.replace(len-4,len,".txt");
arrs[i]=sb.toString();
}
System.out.println(Arrays.toString(arrs));
注意:
如果使用到字符的替换,使用StringBuilder中的替换代替String中的替换,方法很有效率。
只有一种情况:替换的字符串在字符串中不知道位置。
indexOf结合StringBuilder()替换
StringBuffer方法中带synchronized 关键字,是并发的意思。
hashCode/equals相等时,hashCode效率高,equals效率低
String:根据字节数组中每一个元素的哈希值来判断相等,+31*前一元素的哈希值。
matches 匹配正则表达,自己写正则表达式
contains包含 indexOf lastIndexOf
contains相当于indexOf, lastIndexOf调用indexOf
contains返回的true或者false, indexOf返回被查字符串的索引。
split 重要指数非常高,作用把字符串按照特定字符串分割成数组。