一、String的遍历
方式1:利用charAt()方法和for循环语句逐个遍历字符串每个字符的下标以实现字符串的遍历。
示例:
String str = "一点寒芒先到,随后枪出如龙";
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
System.out.print(c);
}
输出结果为:一点寒芒先到,随后枪出如龙
方式2:利用toCharArray()方法将字符串转化为字符数组并利用for循环遍历其每个数组元素下标实现字符串的遍历。
示例:
String str = "一点寒芒先到,随后枪出如龙";
char[] arr = str.toCharArray();
for (int i = 0; i < arr.length; i++) {
char c1 = arr[i];
System.out.print(c1);
}
输出结果为:一点寒芒先到,随后枪出如龙
二、String的比较
因为String类的implements实现了Comparable接口重写了Compareto()方法,因此String之间可以利用CompareTo()方法来比较其内容,比较的输出结果<0则前者小于后者,=0则两者相等,>0则前者大于后者。
示例:
String s1 = "abc";
String s2 = "abb";
System.out.println(s1.compareTo(s2));
输出结果为:1
两个字符串比较后的值为>0的数,因此可以知道s1>s2
三、String的查找搜索
1.indexOf()方法
从原字符串中查找目标字符串,返回第一次出现的位置
2.lastIndexOf()方法
从原字符串中查找目标字符串,返回最后一次出现的位置
3.contains()方法
判断原字符串中是否存在目标字符串
4.startsWith()方法
判断原字符串是否以目标字符串开头
5.endsWith()方法
判断原字符串是否以目标字符串结尾
示例:
String s="一点寒芒先到,随后枪出如龙";
String target="寒芒";
//indexOf()方法:
//如果存在,则返回该目标字符串的下标(>=0)
//如果不存在:返回-1
int index1=s.indexOf(target,2);
System.out.println(index1);
//lastIndexOf()方法:
//如果存在,则返回true
//如果不存在:返回-1
int index=s.lastIndexOf(target);
System.out.println(index);
//Contains()方法:
//如果存在,则返回true
//如果不存在,则返回false
boolean isContains=s.contains(target);
System.out.println(isContains);
//startsWith()方法:
//如果是以目标字符串开头,则返回true
//如果不是,则返回false
boolean isStarts=s.startsWith(target);
System.out.println(isStarts);
//endsWith()方法:
//如果是以目标字符串结尾,则返回true
//如果不是,则返回false
boolean isEnds=s.endsWith(target);
System.out.println(isEnds);
输出结果为:2 2 true false false
四、String的截取
如果需要对字符串截取出目标子字符串,可以利用substring()方法将目标子字符串截取出来。
示例:
//邮箱地址
String email="123456789@qq.com";
//截取用户名
//先获取@字符的下标
int endIndex=email.indexOf("@");
//从0开始截取到@下标处之前
String userName=email.substring(0,endIndex);
//截取邮箱服务器
//邮箱服务器的下标从@字符后开始
int beginIndex=endIndex+1;
//获取'.'的下标
endIndex=email.indexOf(".");
//从@后开始截取到'.'下标处之前
String host=email.substring(beginIndex, endIndex);
System.out.println("用户账号:"+userName);
System.out.println("邮箱服务器:"+host);
输出结果为:
用户账号:123456789
邮箱服务器:qq
五、去除首尾"空白字符"
在某种特殊需求和工作下,可以使用trim()方法来消除字符串头部和尾部的空白字符( \t \n \r,在目前这个时期可以视作\t\与n的作用相同 )。
// 空白字符 : 空格 \t \r \n
String s1 = "\tA\tBCD\n";
// 去除首尾"空白字符"
s1 = s1.trim();
System.out.println(s1);
System.out.println(s1.length());
输出结果为:
A BCD
5
由输出结果可以发现,该字符串在消除"空白字符"后字符串长度为5(4个字母及一个制表符),而字符串头部的制表符以及尾部的换行符被成功消除了。
六、String的字符替换
1.replace()方法
1.1字符替换字符
String res=ip.replace('.', '#');
1.2字符串替换字符串
String res=ip.replace(".","[.]");
2.replaceAll()方法
使用正则表达式regex进行匹配并替换
[\\,\\.] 匹配到1个字符内容并替换
String ip = "A,,,B...C,,D,E";
String res1 = ip.replaceAll("[\\,\\.]", "#");
[\\,\\.]+ 匹配到多个字符内容并替换
String res2 = ip.replaceAll("[\\,\\.]+", "#");
[A-Z]+ 匹配到多个大写字母
String res3 = ip.replaceAll("[A-Z]+", "#");
"."代表一个正则表达式,匹配任意字符
String res4 = ip.replaceAll(".", "#");
"\\."代表一个普通字符内容,仅匹配"."
String res5 = ip.replaceAll("\\.", "#");
输出结果为:
原字符串:A,,,B...C,,D,E
替换结果1:A###B###C##D#E
替换结果2:A#B#C#D#E
替换结果3:#,,,#...#,,#,#
替换结果4:##############
替换结果5:A,,,B###C,,D,E
七、String的字符分割
利用splite()方法分割字符串
示例:
// 按照输入的字符进行分割
String str1 = "西安#咸阳#宝鸡#榆林#延安#渭南#汉中#商洛";
String[] s1 = str1.split("\\#");
System.out.println(Arrays.toString(s1));
// 按照正则表达式的特殊字符进行分割
String str2= "西安+咸阳+宝鸡+榆林+延安+渭南+汉中+商洛";
String[] s2=str2.split("[\\+]");//+属于正则表达式的特殊符号,必须转义
System.out.println(Arrays.toString(s2));
// 按照正则表达式的特殊字符进行分割
String str3 = "西安A咸阳S宝鸡D榆林F延安G渭南H汉中J商洛";
String[] s3 = str3.split("[A-Z]");
System.out.println(Arrays.toString(s3));
//按照正则表达式匹配多个字符进行分割
String str4 = "西安2咸阳3宝鸡444榆林55延安66渭南7汉中8商洛";
String[] s4 = str4.split("[0-9]+");
System.out.println(Arrays.toString(s4));
输出结果为:
[西安, 咸阳, 宝鸡, 榆林, 延安, 渭南, 汉中, 商洛]
[西安, 咸阳, 宝鸡, 榆林, 延安, 渭南, 汉中, 商洛]
[西安, 咸阳, 宝鸡, 榆林, 延安, 渭南, 汉中, 商洛]
[西安, 咸阳, 宝鸡, 榆林, 延安, 渭南, 汉中, 商洛]
八、String的拼接
拼接字符串可以利用join()方法,它用指定的字符串连接字符串数组
示例:
//传入数组
String[] arr= {"西安","咸阳","宝鸡","渭南","汉中","安康","铜川","榆林"};
String res1=String.join("$", arr);
System.out.println(res1);
//传入动态参数
String res2=String.join("$", "西安","咸阳","宝鸡","渭南","汉中","安康","铜川","榆林","延安");
System.out.println(res2);
//String.format():格式化拼接
String res3=String.format("商品价格¥%f,库存%d,卖家:%s", 25.55,100,"XX书城");
System.out.println(res3);
输出结果为:
西安$咸阳$宝鸡$渭南$汉中$安康$铜川$榆林
西安$咸阳$宝鸡$渭南$汉中$安康$铜川$榆林$延安
商品价格¥25.550000,库存100,卖家:XX书城
九、StringBuilder
普通String字符串的拼接
Java编译器对String做了特殊处理,使得我们可以直接用 + 拼接字符。例如:
String s = " ";
for(int i = 0;i < 1000; i++){
s = s + "," + i;
}
虽然可以直接拼接字符串,但是,在循环中,每次循环都会创建新的字符串对象,然后扔掉旧的字符串。这样,绝大部分字符串都是临时对象,不但浪费内存,还会影响效率。
使用StringBuilder进行拼接
为了能高效的拼接字符串,Java标准库提供了StringBuilder,它是一个可变对象,可以预分配缓冲区,这样,往StringBuilder中新增字符时,不会创建新的临时对象。
StringBuilder sb = m=new StringBuilder(1024);
for(int i = 0; i < 1000; i++){
sb.append(',');
sb.append(i);
}
String s = sb.toString();
StringBuilder方法汇总
//频繁的字符串拼接(修改)
//应该选择“可变字符串”:StringBuilder或StringBuffer
//创建1个可变字符串:内部的char[]字符数组采用默认容量16
StringBuilder s1=new StringBuilder();
//创建1个可变字符串:内部的char[]字符数组采用指定容量512
StringBuilder s2=new StringBuilder(512);
//创建1个可变字符串:内部的char[]字符数组采用指定字符串的长度+16
StringBuilder s3=new StringBuilder("A");
System.out.println(s3);
//向当前字符串s3的尾部追加
s3.append("B");
s3.append("C");
s3.append("C");
//...
s3.append("Z");//第18个字符,内容数组容量不足时,数组扩容
System.out.println(s3);
//向当前字符串s3的指定位置插入
s3.insert(0, "a");
System.out.println(s3);
//删除字符串
s3.delete(0,2);
System.out.println(s3);
//截取字符串
String res=s3.substring(0,2);
System.out.println(s3);
System.out.println(res);
输出结果为:
A
ABCCZ
1ABCCZ
BCCZ
BCCZ
BC
十、StringJoiner
使用StringJoiner工具类可以实现使用分隔符拼接数组
示例:
要求输出{"西安","宝鸡","咸阳"}
String[] cityArr= {"西安","宝鸡","咸阳"};
//使用String.join()
String res1=String.join(",", cityArr);
res1= "{"+res1+"}";
System.out.println(res1);
输出结果为:
{西安,宝鸡,咸阳}
该结果显然不能满足要求,因此可以使用StringJoiner
//StringJoiner
//设置分隔符、左右关闭符号(开始符号和结束符号)
StringJoiner joiner=new StringJoiner(",","{","}");
for(String city:cityArr) {
joiner.add(String.format("\"%s\"", city));
}
String res2=joiner.toString();
System.out.println(res2);
输出结果为:
{"西安","宝鸡","咸阳"}
以上为我个人对String及String相关工具类的一些总结,如果错漏请务必联系,非常感谢。