java - 测试某些字符时出现 StringIndexOutOfBoundsException 的解决方法

标签 java equals

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

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

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

最佳答案

如果要返回false如果length输入低于 2,您可以在尝试执行 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");
}

关于java - 测试某些字符时出现 StringIndexOutOfBoundsException 的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19972744/

相关文章:

java - Hibernate 自定义 validator 消息 Spring MVC

java - 在 Swing 外使用 Swing 计时器可以吗?

java - JFrame 不更新背景颜色

java - 使用比较器聚合相似的对象,而不与 equals() 保持一致

java - Sonar 问题 : "Overide the "equals"method in this class

jquery - 使用 row-eq-height 的 Bootstrap 等列高度不适用于我的页面

java - 正确实现分数的 equals() 方法

java - 零和等于的对称性

java - 抛出异常然后调用构造函数?

java - 使用 maven central 来解决依赖关系(在公司网络内)是否安全?