我改進了來自編碼蝙蝠的啟動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條經驗 獲得超5個贊
它返回空字符串的原因是,因為 indexOf 條件的結果是空字符串。
"zzzz"
此部分返回到空字符串,因為沒有“o”字符
(str.indexOf('o') == 0 ? "o" : "") //Equals to ""
然后這也返回空,因為“z”是索引0。
(str.indexOf('z') == 1 ? "z" : "") //Equals to ""
indexOf 返回第一個字符匹配的索引號,因此“z”的索引為 0。你有它。
添加回答
舉報
0/150
提交
取消