我改进了CodingBat为startOz任务提供的解决方案。我找到了上一个解决方案更好的解决方案,当我对其进行测试时,在一个测试用例中得到了意外的解决方案。
public String startOz(String str) {
String result = (str.indexOf('o') == 0 ? "o" : "").concat(str.indexOf('z') == 1 ? "z" : "");
return result;
}
// test case:
String str = "zzzz";
System.out.println("test=" + startOz(str));
我不明白为什么当我期望得到test = z时为什么会得到空字符串作为结果
答案 0 :(得分:9)
因为字符串索引从0开始
str.indexOf('z') == 1 is false
str.indexOf('z') == 0 is true
答案 1 :(得分:9)
str.indexOf('z') == 1
返回false是因为indexOf
“ 返回指定字符的首次出现的字符串中的索引”。在您的情况下,str.indexOf('z')
为零,因为第一次出现是零。
有a version of this method which takes an additional argument定义了从哪个索引开始,因此您可以使用以下命令检查Z是否为第二个字符:
str.indexOf('z', 1) == 1
也就是说,解决此问题的更好方法可能是使用charAt
:
if (str.charAt(0) == 'o') //...
if (str.charAt(1) == 'z') //...
答案 2 :(得分:7)
测试'o'
中没有String
字符,因此您将空String
与空String
连接起来,因为'z'
的第一个索引字符为0。indexOf
返回第一个匹配索引,因此为0,而不是1。
答案 3 :(得分:1)
由于indexOf条件的结果为空字符串而返回空字符串的原因。
"zzzz"
此部分返回空字符串,因为没有“ o”字符
(str.indexOf('o') == 0 ? "o" : "") //Equals to ""
然后这也返回空,因为“ z”的索引为0。
(str.indexOf('z') == 1 ? "z" : "") //Equals to ""
indexOf返回第一个与索引匹配的字符,因此“ z”的索引为0。 在那里,你有它。