6.2.3 字符串处理的方法
字符串类拥有很多针对字符串操作的方法。在这里主要讲述串连接、提取子串、从字符串中分解字符、得到字符串的长度、测试字符串是否相等、查找特定字符串、从基本类型转换成字符串等。
1.串连接
在Java语言中,有两种串连接的方法:一种是使用“+”,另一种是使用方法函数“concat(String str)”。
【实例6.9】下面分别来举例说明。
01 ///通过加号将两个字符串str1和str2连在一起
02 public class str9
03 {
04 public static void main(String[]args)
05 {
06 String str1="you";
07 String str2="welcome";
08 System.out.println(str1+""+str2);
09 }
10 }
【代码说明】第8行通过“+”将str1和str2两个字符串连接在一起。【运行效果】
you welcome
【实例6.10】上面实例使用了“+”号运算符来连接两个字符串,形成新的字符串。下面通过concat方法将两个字符串连接起来。
01 ///使用concat方法将两个字符串str1和str2连在一起
02 public class str10
03 {
04 public static void main(String[]args)
05 {
06 String str1="you";
07 String str2="welcome";
08 System.out.println(str1.concat(str2));
09 }
10 }
【代码说明】第8行使用了concat()方法,str1先输出,然后是str2。
【运行效果】
you welcome
这个实例使用了“concat”方法来连接两个字符串,形成新的字符串。无论用哪种方法将两个字符串连接起来,都同样形成新的字符串。
【实例6.11】下面将演示一个稍微复杂点的程序段。
01 ///初始化两个字符数组c和c1
02 ///通过构造器构造一个从字符数组c第1个元素开始,共4个元素组成的字符串str1
03 ///通过构造器构造一个从字符数组c1第2个元素开始,共1个元素组成的字符串str2
04 ///通过concat方法将两个字符串str2和str1连在一起
05 public class str11
06 {
07 public static void main(String[]args)
08 {
09 char[]c={'c','h','i','n','e','s','e'};
10 char[]c1={'h','a','n','d','l','e'};
11 String str1=new String(c,0,4);
12 String str2=new String(c1,1,1);
13 System.out.println(str1.concat(str2));
14 }
15 }
【代码说明】第9~10行定义了两个字符数组。第11~12行通过构造器构造两个字符串对象。第13行使用concat()方法连接两个字符串。
【运行效果】
china
分析以上的程序段,首先利用构造器,构造了两个将字符数组连在一起的字符串。再在这两个字符串中提取新的字符串,最后再将两个字符串合并成新字符串。仔细分析这个程序,发现这个程序段是几个知识点的组合。所以读者编程时,一定将每个知识点弄清楚,这样编写代码就不再是件难事。
2.提取子字符串
有时一个很长的字符串,其中只有一小部分是需要的,于是Java语言类库中,就提供了相应的获取局部字符串的方法。这些方法是:“substring(int beginIndex, int endIndex)”或“substring(int index)”。下面将详细地讲述这两个方法的意义和使用方法。
❑“substring(int index)”是指提取从index指定的位置开始,一直到字符串的最后。
❑“substring(int beginIndex, int endIndex)”是指提取由“beginIndex”位置开始,到以“endIndex”为结束位置的字符串。
【实例6.12】下面将举个如何提取子字符串的实例。
01 ///初始化一个字符串str
02 ///提取从字符串的第3个元素开始到第10个元素位置的字符串,并且将其输出
03 public class str12
04 {
05 public static void main(String[]args)
06 {
07 String str="we are students and he is worker";
08 System.out.println(str.substring(2,10));
09 }
10 }
【代码说明】第7行定义了一个字符串对象str,第8行使用substring(2,10)截取字符串的一部分。
【运行效果】
are stu
【实例6.13】下面再举个如何提取子字符串的例子。
01 ///初始化一个字符串str
02 ///提取从字符串的第4个元素开始到结束位置的字符串,并且将其输出
03 public class str13
04 {
05 public static void main(String[]args)
06 {
07 String str="we are students and he is worker";
08 System.out.println(str.substring(3));
09 }
10 }
【代码说明】第8行使用了substring(3),表示从第4个元素开始截取字符串。【运行效果】
are students and he is worker
【实例6.14】其实提取子字符串的方法很简单,下面将看一个综合的例子。
01 ///初始化一个字符串str
02 ///通过循环语句,提取从字符串的第1个元素开始到结束位置的字符串,一直到从最后一个元素
03 ///到最后的字符串,并且将其输出
04 public class str14
05 {
06 public static void main(String[]args)
07 {
08 String str="we are students and he is a worker";
09 for(int i=0;i<34;i++)
10 {
11 System.out.println(str.substring(i));
12 }
13 }
14 }
【代码说明】这个程序以循环语句输出从第一个位置到最后一个位置的子字符串。这个程序段的运行结果看起来很复杂,但这个程序原理非常简单。
【运行效果】
we are students and he is a worker
e are students and he is a worker
are students and he is a worker
are students and he is a worker
re students and he is a worker
e students and he is a worker
students and he is a worker
students and he is a worker
tudents and he is a worker
udents and he is a worker
dents and he is a worker
ents and he is a worker
nts and he is a worker
ts and he is a worker
s and he is a worker
and he is a worker
and he is a worker
nd he is a worker
d he is a worker
he is a worker
he is a worker
e is a worker
is a worker
is a worker
s a worker
a worker
a worker
worker
worker
orker
rker
ker
er
r
3.从字符串中分解字符
上面的方法是从字符串中提取子字符串,而将要讲述的是从字符串中提取一个指定的字符。从字符串中分解字符的方法是:“charAt(int index)”,这个方法返回的是一个字符,而不是字符串,这是跟前面方法的区别。参数“index”是指字符串序列中字符的位置。
【实例6.15】下面将举个实例演示如何使用此方法。
01 ///从字符串中第2个位置将字符提取出来
02 public class str15
03 {
04 public static void main(String[]args)
05 {
06 String str="we are students and he is a worker";
07 System.out.println(str.charAt(1));
08 }
09 }
【代码说明】这个程序段输出的是字符串第二个字符,因为字符串位置从零开始计算,所以输出的字符是“e”。
【运行效果】
e
4.得到字符串的长度
在学习数组时,学到过数组长度,而在这里也要讲到字符串的长度。字符串长度使用方法“length()”获取。
注意
数组的长度是“length”,而字符串的长度是“length()”,数组的长度后面没有括号,得到的数组长度是一个属性值,而得到字符串长度是一个方法。
【实例6.16】看看下面的程序段。
01 ///输出字符串的长度
02 public class str16
03 {
04 public static void main(String[]args)
05 {
06 String str="we are students and he is a worker";
07 System.out.println(str.length());
08 }
09 }
【代码说明】第7行使用了length()方法直接输出str对象的长度。
【运行效果】
34
5.测试字符串是否相等
在实际程序开发中,经常会出现一些比较字符串的程序模块,通过比较字符串是否相等,来实现某个要求。例如,通过比较两个字符串是否相等,来确认密码和用户名是否正确,从而判断是否可以登录系统。这个在系统登录界面中经常遇到。测试字符串是否相等的方法是“equals(String str)”。
【实例6.17】下面看一个具体的测试字符串是否相等的实例。
01 ///通过比较字符串str和str1两个字符串是否相同,来确定不同的输出
02 ///如果相同则输出"密码正确,请登录系统"
03 ///否则输出"密码不正确,请重新输入密码"
04 public class str17
05 {
06 public static void main(String[]args)
07 {
08 String str="administrator";
09 String str1="administrator";
10 if(str.equals(str1))
11 {System.out.println("密码正确,请登录系统");}
12 else
13 {System.out.println("密码不正确,请重新输入密码");}
14 }
15 }
【代码说明】第8~9行是两个字符串。第10行是判断语句,通过equals()方法判断两个指定的字符串是否相等。
【运行效果】
密码正确,请登录系统
在现实程序开发中,有的登录系统对于输入密码的大小写忽略。此时在Java语言中也有一个方法就是“equalsIgnoreCase(String str)”,这个方法忽略字符串大小写。
【实例6.18】下面看一个程序段的例子。
01 ///通过比较字符串str和str1两个字符串是否相同,来确定不同的输出,此时忽略大小写
02 ///如果相同则输出"密码正确,请登录系统"
03 ///否则输出"密码不正确,请重新输入密码"
04 public class str18
05 {
06 public static void main(String[]args)
07 {
08 String str="Administrator";
09 String str1="administrator";
10 if(str.equalsIgnoreCase(str1))
11 {System.out.println("密码正确,请登录系统");}
12 else
13 {System.out.println("密码不正确,请重新输入密码");}
14 }
15 }
【代码说明】第8~9行定义了两个字符串,它们的不同就是首字母是否大小写。第10行使用了equalsIgnoreCase()方法来进行判断。
【运行效果】
密码正确,请登录系统
以上的程序段是使用了忽略大小写的方法,比较两个字符串是否相等。
【实例6.19】下面将通过不忽略大小写的方法编写代码,并与上例相比较。
01 ///通过比较字符串str和str1两个字符串是否相同,来确定不同的输出,此时不忽略大小写
02 ///如果相同则输出"密码正确,请登录系统"
03 ///否则输出"密码不正确,请重新输入密码"
04 public class str19
05 {
06 public static void main(String[]args)
07 {
08 String str="Administrator";
09 String str1="administrator";
10 if(str.equals(str1))
11 {System.out.println("密码正确,请登录系统");}
12 else
13 {System.out.println("密码不正确,请重新输入密码");}
14 }
15 }
【代码说明】第8~9行是一个单词,不同的是首字母一个大写,一个小写。第10行的equals()方法在比较时并不忽略大小写,所以比较结果是false。
【运行效果】
密码不正确,请重新输入密码
6.查找特定子串
在程序开发的过程中,有的系统提供查找子系统,用于查找自己需要的内容。在Java语言中,也提供了查找特定子串的功能,可以帮助查找自己需要的子字符串。
查找字符串子串有三个方法:
❑“indexOf(子串内容)”方法是帮助查找子串,如果返回的是负数,就表示在当前字符串中没有找到所查找的子串。
❑“startsWith(子串内容)”方法测试当前字符串是否以一个子串开始。
❑“endsWith(子串内容)”方法测试当前字符串是否以子串内容为结尾。
【实例6.20】下面看一下具体的程序段,通过实例读者会理解得更加透彻。
01 ///通过indexOf方法来查找字符串中的元素位置
02 ///通过endsWith来查找当前元素是否是字符串的结尾
03 ///通过startsWith来查找当前元素是否是字符串的开头
04 public class str20
05 {
06 public static void main(String[]args)
07 {
08 String str="是一个很优秀的程序员";
09 System.out.println(str.indexOf("个"));
10 System.out.println(str.endsWith("员"));
11 System.out.println(str.startsWith("明"));
12 }
13 }
【代码说明】str.indexOf(“个”)是测试字符串中的“个”这个子串的位置。str.endsWith(“员”)是测试字符串“员”是否是这个字符串的结尾。str.startsWith(“明”)是测试字符串“明”是否是这个字符串的开始。后面两个方法返回的是布尔型数据。
【运行效果】
2 true
false
7.从基本类型转换成字符串
使用“valueOf()”将基本类型的数据转换成相应的字符串。由于这个方法很简单,读者在后面的程序中会看到,这里不作详细的解释。
8.toString()方法
为什么会把这个方法提出来讲述呢?因为它是程序开发语言中非常重要的字符串处理方法。
【实例6.21】复习下面的程序段。
01 public class str21
02 {
03 public static void main(String[]args)
04 {
05 String str="小明是一个很优秀的程序员";
06 System.out.println(str);
07 }
08 }
【代码说明】第5行定义一个字符串str,第6行直接输出str。
【运行效果】
小明是一个很优秀的程序员
为什么可以直接将这个对象作为输出的参数呢?因为在Java语言内含一种机制,系统默认会在这些对象后面自动加上“toString()”方法。在Java类库的基本类中,每一个类都有一个“toString()”方法,可以将这个方法写出来,也可以直接使用对象来代替“toString()”方法。
【实例6.22】下面来看看这个方法的实际例子。
01 ///通过toString方法来输出对象的字符串形式
02 public class str22
03 {
04 public static void main(String[]args)
05 {
06 String str="小明是一个很优秀的程序员";
07 System.out.println(str.toString());
08 }
09 }
【代码说明】其实上面的程序段与前面的程序段输出一模一样。它们之间唯一不同的是,在输出语句中一个是把对象作为参数,将其内容输出。而上面的程序段则是直接运用“toString()”方法,将对象中的字符串提取出来,然后再进行输出。
【运行效果】
小明是一个很优秀的程序员
对于Java语言的类库来说,一般可以省去“toString()”方法,但如果是自己设计的类,最好加上这个方法,养成良好的编程习惯。