一、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="[email protected]"; //截取用户名 //先获取@字符的下标 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()方法来消除字符串头部和尾部的空白字符(
,在目前这个时期可以视作 与n的作用相同 )。
// 空白字符 : 空格 String s1 = " A BCD "; // 去除首尾"空白字符" 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相关工具类的一些总结,如果错漏请务必联系,非常感谢。