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()”方法,但如果是自己设计的类,最好加上这个方法,养成良好的编程习惯。