6.6 字符串的高级处理
还有多种其他方式可用于查看字符串变量和修改其值。之所以有这些高级功能,是因为字符串在Java语言中是对象。通过处理字符串对象获得的知识,也适用于其他对象。
6.6.1 比较两个字符串
在程序中经常要测试两个字符串是否相等,为此可在带有两个字符串的语句之中使用equals(),如下所示:
String favorite = "chainsaw";
String guess = "pool cue";
System.out.println("Is Fin's favorite weapon a " + guess + "?");
System.out.println("Answer: " + favorite.equals(guess));```
这里使用了两个字符串变量,一个是变量favorite,用于存储Fin最喜欢的捕鲨工具——电锯;另一个变量是guess,用于存储对其最喜欢的工具的猜测,该猜测是Fin最喜欢台球杆。
第3行显示文本“Is Fin’s favorite weapon a”,后跟变量guess的值和问号。第4行显示文本“Answer:”以及下面的新内容:
favorite.equals(guess)`
语句中的这部分称为方法。方法是在Java程序中完成任务的一种方式,这里的方法要完成的任务是,比较字符串favorite和字符串guess的值是否相等。如果这两个字符串的值相等,就显示true,否则显示false。下面是该示例的输出结果:
Output ▼
Is Fin's favorite weapon a pool cue?
Answer: false```
####6.6.2 确定字符串的长度
有时确定字符串的长度很有用,为此可使用方法length()。该方法的工作原理与equals()相似,但只涉及一个字符串变量。请看下面的例子:
String cinematographer = "Ben Demaree";
int nameLength = cinematographer.length();`
该示例将整型变量nameLength的值设置为11,方法cinematographer.length()计算字符串变量cinematographter包含的字符数,并将结果赋给整型变量nameLength。
6.6.3 改变字符串的大小写
计算机很不灵活,不能识别明显相同的东西。虽然人很容易识别出文本Ian Ziering和IAN ZIERING是一回事,但大多数计算机不这么认为。例如,在本章前面介绍的equals()方法将果断地认为Ian Ziering不等于IAN ZIERING。
为了绕过这些障碍,Java提供了将字符串变量全部转换为大写的方法(toUpperCase())和全部转换为小写的方法(toLowerCase())。下面的例子演示了如何使用方法toUpper Case():
String fin = "Ian Ziering";
String change = fin.toUpperCase();```
这段代码将字符串变量change设置为字符串变量fin的大写形式,即IAN ZIERING。toLowerCase()方法的用法相同,但返回的是字符串的小写。
注意,toUpperCase()方法不改变它调用的字符串变量的大小写。在上述示例中,变量fin的值仍为Ian Ziering。
绕过这一障碍的另一种方法是调用equalsIgnoreCase()方法,它在比较两个字符串时不考虑大小写。调用该方法比较字符串“Tara Reid”和“TARA REID”时,返回的结果为true,表示它俩匹配。
####6.6.4 查找字符串
处理字符串时,另一项常见的任务是,确定在一个字符串中能否找到另一个字符串。要在字符串中查找,可使用方法indexof(),并将要查找的字符串放在括号中。如果没有找到指定的字符串,indexof()返回−1;如果找到,indexof()返回一个整数,指出该字符串的起始位置。字符串中字符位置从0开始编号,即第一个字符的位置为0。在字符串“Sharknado”中,文本“nado”的起始位置为5。
indexof()方法的一种用法是搜索电影《Sharknado》的整个剧本,找到主人公将直升飞机开入到龙卷风中投弹,并且Nova说“We’re gonna need a bigger chopper”的地方。
如果《Sharknado》的整个剧本存储在变量script中,可以使用下面的语句从中搜索上面这句话:
int position = script.indexOf("We're gonna need a bigger chopper");
如果在script字符串中找到该文本,变量position将等于该文本在script中的起始位置,否则将等于−1。
如果你打算在一个字符串中寻找另外一个字符串,但是不关心其位置,可以使用字符串的contains()方法,它将返回一个布尔值。如果找到了字符串,返回true;否则返回false。下面是一个示例:
if (script.contains("There's a shark in your pool")) {
int stars = 4;
}