我改进了来自编码蝙蝠的启动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时,我得到空字符串的结果
4 回答
呼如林
TA贡献1798条经验 获得超3个赞
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
TA贡献1966条经验 获得超4个赞
因为字符串索引从 0 开始
str.indexOf('z') == 1 is false str.indexOf('z') == 0 is true
不负相思意
TA贡献1777条经验 获得超10个赞
测试中没有字符,因此将空与空连接起来,因为字符的第一个索引为 0。 返回第一个匹配的索引,因此它是 0,而不是 1。'o'
String
String
String
'z'
indexOf
收到一只叮咚
TA贡献1821条经验 获得超4个赞
它返回空字符串的原因是,因为 indexOf 条件的结果是空字符串。
"zzzz"
此部分返回到空字符串,因为没有“o”字符
(str.indexOf('o') == 0 ? "o" : "") //Equals to ""
然后这也返回空,因为“z”是索引0。
(str.indexOf('z') == 1 ? "z" : "") //Equals to ""
indexOf 返回第一个字符匹配的索引号,因此“z”的索引为 0。你有它。
添加回答
举报
0/150
提交
取消