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

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相关工具类的一些总结,如果错漏请务必联系,非常感谢。