为了账号安全,请及时绑定邮箱和手机立即绑定

不返回预期的串联字符串

不返回预期的串联字符串

素胚勾勒不出你 2022-09-28 09:58:01
我改进了来自编码蝙蝠的启动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') //...


查看完整回答
反对 回复 2022-09-28
?
慕标5832272

TA贡献1966条经验 获得超4个赞

因为字符串索引从 0 开始

str.indexOf('z') == 1 is false
str.indexOf('z') == 0 is true


查看完整回答
反对 回复 2022-09-28
?
不负相思意

TA贡献1777条经验 获得超10个赞

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



查看完整回答
反对 回复 2022-09-28
?
收到一只叮咚

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。你有它。


查看完整回答
反对 回复 2022-09-28
  • 4 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信