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 重要指数非常高,作用把字符串按照特定字符串分割成数组。
攻击 云(穴头)
应用的场景
- 网站的安全(封ip,封mac)split切分ip (攻击)
- 统计一个字符串中某些字符的出现次数。
(一个用户1分钟内刷网站1000次)
刷网站的痕迹在日志.
Split判断字符在字符串的次数,length-1,大致判断出来这个ip的驱势.
静态方法join 数组连接成字符串
toLowerCase 把字符转小写
toUpperCase 把字符转大写
trim()方法截取空格
toCharArray把字符串转成字符数组
静态方法 format
String.format(“%.2f”,s)
静态方法: valueOf
如果当前字符串变量为空,返回字符串为空
native 原生
*******
集合类(变长)
应用最多的变长数组,也就列表
ArrayList
了解原理
New ArrayList过程建立一个空数组
自己添加元素会报错。
ArrayList添加元素不报错,原因前面有一个方法
ensureCapacityInternal(size + 1);
在调用ArrayList上的add方法前, java做了一个
Arrays.copyOf拷贝数组
add一个元素,java默认产生一个数组,数组的长度是10.
查询列表是get方法
public E get(int index) {
rangeCheck(index);
return elementData(index);
}
在get方法中最开始执行一个rangeCheck