不返回预期的串联字符串

我改进了来自编码蝙蝠的启动Oz任务的解决方案。我从上一个中找到了更好的解决方案,当我测试它时,我在一个测试用例中得到了一个意想不到的解决方案。


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时,我得到空字符串的结果


素胚勾勒不出你
浏览 112回答 4
4回答

呼如林

str.indexOf('z') == 1返回 false,因为 indexOf “返回指定字符首次出现的此字符串中的索引”。在你的例子中, 是 零,因为零是第一次出现。str.indexOf('z')此方法有一个版本,它采用一个附加参数来定义从哪个索引开始,因此您可以使用以下内容来检查 Z 是否是第二个字符:str.indexOf('z', 1) == 1也就是说,解决这个问题的更好方法可能是使用charAt:if (str.charAt(0) == 'o') //... if (str.charAt(1) == 'z') //...

慕标5832272

因为字符串索引从 0 开始str.indexOf('z') == 1 is false str.indexOf('z') == 0 is true

不负相思意

测试中没有字符,因此将空与空连接起来,因为字符的第一个索引为 0。 返回第一个匹配的索引,因此它是 0,而不是 1。'o'StringStringString'z'indexOf

收到一只叮咚

它返回空字符串的原因是,因为 indexOf 条件的结果是空字符串。"zzzz"此部分返回到空字符串,因为没有“o”字符(str.indexOf('o') == 0 ? "o" : "") //Equals to ""然后这也返回空,因为“z”是索引0。(str.indexOf('z') == 1 ? "z" : "") //Equals to ""indexOf 返回第一个字符匹配的索引号,因此“z”的索引为 0。你有它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java