测试某些字符时StringIndexOutOfBoundsException的解决方法

时间:2013-11-14 08:23:48

标签: java equals

我正在制作一个if条件来测试,看看给定的字符串是否包含“me”。

Given     Return
-----     ------
Lame      True
Meant     False
Come      True
etc

现在,如果字符串长度超过2个字符,我的代码就能完美运行。

public boolean containsLy(String input) {
  String ly = "ly";
  String lastString = input.substring(input.length() - 2);
  if (input.length() < 2) {
      return false;
  }else if (lastString.equals(ly)) {
      return true;
  }else
      return false;
}

但是每当字符串有2个字符或更少时,我就会收到此错误:

StringIndexOutOfBoundsException

这显然是因为数字为负数,但我想不出有解决办法。

4 个答案:

答案 0 :(得分:4)

如果您想在输入的false低于2时返回length,则可以在尝试对输入执行substring操作之前进行检查。

public boolean containsLy(String input) {
  if (input == null || input.length() < 2) {
      return false;
  }
  else {
     String ly = "ly";
     String lastString = input.substring(input.length() - 2);
     if (lastString.equals(ly)) {
       return true;
     }
     else {
       return false;
     }
  }
}

或者更简单:

public boolean containsLy(String input) {
      if (input == null || input.length() < 2) {
          return false;
      }
      else {
         String ly = "ly";
         String lastString = input.substring(input.length() - 2);
         return lastString.equals(ly);
      }
    }

或者,摆脱所有if / else变量的东西(感谢@Ingo):

public boolean containsLy(String input) {
      return input != null 
             && input.length() >= 2
             && input.substring(input.length() - 2).equals("ly");
}

答案 1 :(得分:2)

如此检查

boolean endsWithMe = "myteststring".endsWith("me");

如果您正在练习,那么:

伪代码:

 if length of the given string < 2 then return false
 else substring from index length - 2 to length equals "me"

答案 2 :(得分:0)

不要重新发明轮子。只需使用String#endsWith()

即可

顺便说一句,值得注意的是,你已经发现为什么它没有像你那样工作。但是,你仍然首先尝试获取子字符串,然后才测试它是否可能。为什么呢?

答案 3 :(得分:0)

变通方法很简单..在执行子字符串之前检查字符串长度,或使用indexOf("me")获取索引并使用长度来查看它是否位于length-2位置。< / p>