不返回预期的串联字符串

时间:2019-04-08 09:52:38

标签: java

我改进了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时为什么会得到空字符串作为结果

4 个答案:

答案 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。  在那里,你有它。