String及String相关工具类

一、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的查找搜索

从原字符串中查找目标字符串,返回第一次出现的位置

从原字符串中查找目标字符串,返回最后一次出现的位置

判断原字符串中是否存在目标字符串

判断原字符串是否以目标字符串开头

判断原字符串是否以目标字符串结尾

示例:

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.1字符替换字符

String res=ip.replace('.', '#');

1.2字符串替换字符串

String res=ip.replace(".","[.]");

使用正则表达式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

Java编译器对String做了特殊处理,使得我们可以直接用 + 拼接字符。例如:

String s = " "; for(int i = 0;i < 1000; i++){ s = s + "," + i; }

虽然可以直接拼接字符串,但是,在循环中,每次循环都会创建新的字符串对象,然后扔掉旧的字符串。这样,绝大部分字符串都是临时对象,不但浪费内存,还会影响效率。

为了能高效的拼接字符串,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或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相关工具类的一些总结,如果错漏请务必联系,非常感谢。

原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/31153

(0)
优速盾-小U的头像优速盾-小U
上一篇 2025年6月18日 18:42
下一篇 2025年6月18日 23:04

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

优速盾注册领取大礼包www.cdnb.net
/sitemap.xml