【问题标题】:Logic Error: startWord substring逻辑错误:startWord 子字符串
【发布时间】:2015-05-28 04:05:16
【问题描述】:

我的任务是使用子字符串来提取字符串的前几个字母,如果它与另一个给定的字符串匹配。基本上,给定一个字符串和第二个“单词”字符串,如果单词出现在字符串的前面,我们会说它与字符串匹配,除了它的第一个字符不需要完全匹配。在匹配时,返回字符串的前面,否则返回空字符串。因此,对于字符串“hippo”,单词“hi”返回“hi”,“xip”返回“hip”。单词的长度至少为 1。

我的方法的问题是当 str 只是一个字母而 word 是不匹配 str 的其他内容时,我运行变成一个

StringOutOfBound 异常

例如,如果 str 是 "h" 而 word 是 "ix",它应该什么也不返回。相反,我的方法因 stringoutofbound 异常而崩溃。我能做些什么来修正我的逻辑。

public String startWord(String str, String word) {
   int length;

   length = word.length();

    if (str.substring(0, length).equals(word))
      return str.substring(0, length);
   else if (str.substring(1, length).equals(word.substring(1, word.length())))
      return str.substring(0, length);
   else
      return "";   

}

【问题讨论】:

  • 如果 str 是 hiAll 而 word 是 hiEveryBody 应该是什么结果?
  • @TAsk idk。我所需的测试用例中没有一个 wordstr 有很大的不同。为了回答你的问题,我认为预期的结果会是“嗨”,因为之后的一切都不同了,但我可能是错的。

标签: java substring


【解决方案1】:

以这种方式更正您的条件:

if (str.substring(0, Math.min(length, str.length())).equals(word))
    return str.substring(0, length);
else if (str.substring(1, Math.min(length, str.length())).equals(word.substring(1, word.length()))) {
    return str.substring(0, length);
}
else
    return "";

【讨论】:

  • 它在解决我的一个异常方面做得很好,但是当 str 为空且单词由一个字母组成时,我遇到了另一个问题。结果应该什么都没有。
【解决方案2】:

错误原因是str长度小于word长度。请在您的逻辑前打勾:if(str.length()<=word.length())

else 部分,始终返回"",因为它永远不会满足您的条件。

if(str.length()>=word.length())
{
   if (str.substring(0, length).equals(word))
      return str.substring(0, length);
   else if (str.substring(1, length).equals(word.substring(1, word.length())))
      return str.substring(0, length);
   else
      return ""; 
}
else{
    return "";  
}

【讨论】:

  • 如何在不影响其余代码的情况下使用:if (str.length()<=word.length()) 进行检查?
  • @AwkardGuy 编辑了答案以包含代码。如果它回答了您的问题,请将其标记为正确。
  • 在我将小于改为大于后一切正常。除此之外,感谢您帮助我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多