-1

我有这个代码

public class CountHi {
    static public void main(String[] args) {
        String s1 = "abc.xyz";
        System.out.println(s1.length());
        System.out.println(xyzThere(s1));
    }
    public static boolean xyzThere(String str) {
        if (str.length() > 3)
        {
            for (int i = 0; i < str.length() - 3; i++) {
                System.out.println(str.substring(i, i + 4));
                if (str.substring(i, i + 4).equals(".xyz"))
                {
                    return false;
                } else {
                    return true;
                }
            }
        }
        return false;
    }
}

我从过去一个小时左右开始一直在搜索,但找不到可能的原因导致i++代码失效。实际上我是编程和java的新手,所以请帮助我。谢谢。

4

4 回答 4

7

由于您在for循环的第一次迭代中返回,因此该i++部分将永远不会被执行。

for(int i = 0; i < str.length()-3;i++) {
    System.out.println(str.substring(i,i+4));

    if(str.substring(i,i+4).equals(".xyz")) {
        return false;

    } else {
        return true;
    }
}

您的iforelse块中的任何一个都将被执行,并且它们都会立即返回。所以循环没有机会再次迭代。

我不明白那里的循环的意义。如果您只想检查扩展名是否.xyz存在,则可以使用单个子字符串来完成。

if (s1.substring(s1.lastIndexOf(".")).equals(".xyz")) {
    // true
}

或者,如果您只是想测试,如果您的字符串包含.xyz,那么只需使用String#contains()方法:

s1.contains(".xyz");
于 2013-09-24T08:42:45.127 回答
1

while 循环如果条件if(str.substring(i,i+4).equals(".xyz"))满足或不满足,无论如何都会从循环中返回。并且i++永远不会被执行。

于 2013-09-24T08:43:59.737 回答
1

你需要保持

        System.out.println(str.substring(i,i+4));

{}

于 2013-09-24T08:44:08.533 回答
0

if loop总是会超出这个功能,因为return.

您应该使用布尔变量,并将返回值放在方法的末尾。

声明一个全局变量:

boolean result = false;

然后在你的 if 循环中使用它:

            if (str.substring(i, i + 4).equals(".xyz"))
            {
                result = false;
            } else {
                result true;
            }

在方法末尾添加返回:

return result;
于 2013-09-24T09:30:49.307 回答