我有这段代码
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的新手所以请帮助我。感谢。
答案 0 :(得分: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;
}
}
您的if
或else
块中的任何一个都将被执行,并且它们都会立即返回。所以循环没有机会再次迭代。
我不明白循环的意义。如果您只是想检查扩展名是否为.xyz
,则可以使用单个子字符串来完成。
if (s1.substring(s1.lastIndexOf(".")).equals(".xyz")) {
// true
}
或者,如果您只想测试,如果您的字符串包含.xyz
,那么只需使用String#contains()
方法:
s1.contains(".xyz");
答案 1 :(得分:1)
在循环时,如果满足或不满足条件if(str.substring(i,i+4).equals(".xyz"))
,则无论如何都会从循环返回。并且永远不会执行i++
。
答案 2 :(得分:1)
你需要保持
System.out.println(str.substring(i,i+4));
在{}
答案 3 :(得分:0)
if loop
return
。boolean result = false;
将永远不在函数范围内
您应该使用布尔变量,并将返回值放在方法的末尾。
声明一个全局变量:
if (str.substring(i, i + 4).equals(".xyz"))
{
result = false;
} else {
result true;
}
然后在循环中使用它:
return result;
在方法结尾处添加返回值:
{{1}}