我遇到了一个java字符串练习

时间:2015-10-31 07:23:30

标签: java string

在字符串中查找“zip”和“zap”等模式 - 长度为3,以“z”开头,以“p”结尾。返回一个字符串,对于所有这些单词,中间字母不见了,所以“zipXzap”产生“zpXzp”

这是我从某人那里得到的解决方案:

public class Rough {
    public static void main(String [] args){
        StringBuffer mat = new StringBuffer("matziplzdpaztp");
        for(int i = 0; i < mat.length() - 2; ++i){
            if (mat.charAt(i) == 'z' & mat.charAt(i + 2) == 'p'){
                mat.deleteCharAt(i + 1);
            }
        }
        System.out.println(mat);
   }
}

但为什么for循环条件(i&lt; mat.length() - 2)不是(i&lt; mat.length())????

4 个答案:

答案 0 :(得分:2)

因为 in 循环:

if (mat.charAt(i) == 'z' & mat.charAt(i + 2) == 'p'){
// -----------------------------------^^^^^

如果ii < mat.length()约束,则i + 2将超出范围。

答案 1 :(得分:0)

因为你的单词长度至少为三个字母,所以你不必到达句子的末尾。

答案 2 :(得分:0)

mat.length()将给出长度14,如果你在结尾处检查mat.charAt(i + 2),它将给出java.lang.StringIndexOutOfBoundsException,因为字符串从索引0开始计数而不是从1开始。如果你还是想要使用mat.length()你必须替换AND'&amp;'操作员短路AND'&amp;&amp;'操作符在if条件下。

答案 3 :(得分:0)

&#34; 2&#34;代表&#34;除第一个单词&#34;之外的长度,你只需要检查字符串变量中的所有位置,并将位置视为子字符串的第一个单词,所以只需忽略&# 34;没有第一个单词&#34; 的子字符串的长度。

在你的情况下,&#34; z * p&#34;是3,你只需检查字符串中的所有位置,并将位置视为z以检查某些内容,所以只需忽略&#34; * p&#34; ,长度为2。