Java 不';t返回所需的连接字符串

Java 不';t返回所需的连接字符串,java,string,if-statement,char,jvm,Java,String,If Statement,Char,Jvm,我改进了CodingBat的任务解决方案。我从上一个中找到了更好的解决方案,当我测试它时,在一个测试用例中得到了一个意想不到的解决方案 public String startOz(String str) { String result = (str.indexOf('o') == 0 ? "o" : "").concat(str.indexOf('z') == 1 ? "z" : ""); return result; } 我不明白为什么当我希望得到test=z时,我得到了空字

我改进了CodingBat的任务解决方案。我从上一个中找到了更好的解决方案,当我测试它时,在一个测试用例中得到了一个意想不到的解决方案

public String startOz(String str) {
   String result = (str.indexOf('o') == 0 ? "o" : "").concat(str.indexOf('z') == 1 ? "z" : "");
   return result;
  }

我不明白为什么当我希望得到test=z时,我得到了空字符串作为结果,因为在你的test
字符串中没有
'o'
字符,所以你把一个空
字符串
与空
字符串
,因为
'z'
字符的第一个索引是0
indexOf
返回第一个匹配索引,因此它是0,而不是1。

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

因为字符串索引从0开始

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

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

因为字符串索引从0开始

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

str.indexOf('z') == 0 is true
str.indexOf('z')==1
返回false,因为“返回指定字符第一次出现的字符串中的索引”。在您的例子中,
str.indexOf('z')
是零,因为零是第一次出现

有一个定义从哪个索引开始的函数,因此您可以使用以下函数检查Z是否是第二个字符:

str.indexOf('z', 1) == 1
也就是说,解决此问题的更好方法可能是使用:

str.indexOf('z')==1
返回false,因为“返回指定字符第一次出现的字符串中的索引”。在您的例子中,
str.indexOf('z')
是零,因为零是第一次出现

有一个定义从哪个索引开始的函数,因此您可以使用以下函数检查Z是否是第二个字符:

str.indexOf('z', 1) == 1
也就是说,解决此问题的更好方法可能是使用:


由于indexOf条件的结果为空字符串,因此返回空字符串的原因

"zzzz"
这部分返回空字符串,因为没有“o”字符

(str.indexOf('o') == 0 ? "o" : "") //Equals to ""
然后它也返回空,因为“z”是索引0

(str.indexOf('z') == 1 ? "z" : "") //Equals to ""
indexOf返回与索引号匹配的第一个字符,因此“z”的索引为0。
这就是它。

返回空字符串的原因,因为indexOf条件的结果是空字符串

"zzzz"
这部分返回空字符串,因为没有“o”字符

(str.indexOf('o') == 0 ? "o" : "") //Equals to ""
然后它也返回空,因为“z”是索引0

(str.indexOf('z') == 1 ? "z" : "") //Equals to ""
indexOf返回与索引号匹配的第一个字符,因此“z”的索引为0。
就这样。

在另一个方法中有一个方法。这只是一个打字错误吗?我想说的是调试代码!请创建一个完整而具体的。
str.indexOf('z')
不会返回
1
如果
str==“zzzz”
,它将是
0
您假设每个人都知道
startOz
任务是什么,以及之前的解决方案是什么。请回答您的问题并添加链接和简短描述(以防链接及时消失)。关于StackOverflow的问题不仅仅是针对你,而是针对未来的每一位编码人员。你在另一个方法中有一个方法。这只是一个打字错误吗?我想说的是调试代码!请创建一个完整而具体的。
str.indexOf('z')
不会返回
1
如果
str==“zzzz”
,它将是
0
您假设每个人都知道
startOz
任务是什么,以及之前的解决方案是什么。请回答您的问题并添加链接和简短描述(以防链接及时消失)。关于StackOverflow的问题不仅针对你,也针对未来的每一位程序员。+1对于你的讽刺评论,你的回答已经晚了,因为@Michel已经详细回答了,但仍然投票支持REP:p,Ravi迟到总比不迟到好。+1对于你的讽刺评论,你回答这个问题已经晚了,因为@Michel已经详细回答了,但仍然投票支持REP:p,Ravi迟到总比不迟到好。感谢你对我的问题做出的明确解释和解决方案!感谢您对我的案例的清晰解释和解决方案!