9.3 字符串遍历
下面的循环遍历了字符串变量 fruit 中的字符,并以每个字符独占一行的方式显示:
for (int i = 0; i < fruit.length(); i++) {char letter = fruit.charAt(i);System.out.println(letter);}
字符串提供了一个名为 length 的方法,该方法返回了字符串包含的字符数。因为这是一个方法,所以调用它时必须指定空的实参列表——()。
条件为 i,这意味着当 i 与字符串长度相等时,这个条件为 false,循环将终止。
遗憾的是,改进的 for 循环不能用于遍历字符串。但你可以将任何字符串转换为字符数字,再用改进的 for 循环来迭代:
for (char letter : fruit.toCharArray()) {System.out.println(letter);}
为获取字符串的最后一个字符,你可能试图像下面这样做:
int length = fruit.length();char last = fruit.charAt(length); // 不对!
这些代码能够通过编译并运行,但其中对方法 charAt 的调用将引发 StringIndexOutOfBoundsException 异常,这是因为 "banana" 没有索引为 6 的字符。由于索引从 0 开始,这 6 个字符的索引为 0~5。要获取最后一个字符,必须将 length 减 1。
int length = fruit.length();char last = fruit.charAt(length - 1); // 正确
很多字符串遍历操作涉及读取一个字符串并创建另一个字符串。例如,要想反转字符串,可按从后到前的顺序将字符依次加入到另一个字符串中:
public static String reverse(String s) {String r = "";for (int i = s.length() - 1; i >= 0; i--) {r = r + s.charAt(i);}return r;}
r 的初始值为 "",即空字符串(empty string);其中的循环按从后到前的顺序遍历 s 中的所有字符。每次执行循环时都创建一个新的字符串,并将其赋给 r。循环结束时,r 包含 s 的所有字符,但排列顺序相反。因此,reverse("banana") 的结果为 "ananab"。
