在if语句Java中处理StringIndexOutOfBoundsException

时间:2016-07-13 00:02:16

标签: java runtime-error

我有一个从控制台获取输入的程序。它检查输入然后使用'如果它决定做什么。一节测试,看看字符串的前四个字母是什么,看它是否需要处理它,但不是所有的字符串总是4个或更多字母长。这意味着如果您键入的内容长度少于4个字母,则会遇到错误,然后退出。我不能把那个部分放在最后,因为最后有一个else,如果命令未知,则调用并发生一些事情。有没有办法可以阻止错误发生?

我的代码是:

if(input.equals("help")){
    int commandsSize = commands.size();
    for(int i = 0; i < commandsSize; i++) {
    String value = commands.get(i);
    System.out.println(value);
} else if((input.substring(0, 4)).equals("open")) {
...
}

2 个答案:

答案 0 :(得分:0)

您可以检查用户输入的字符串的大小,

if (input.length() != 4) {
  System.out.println("You must enter valid input");
  // Probably do something here. 
}

if(input.equals("help")){
    int commandsSize = commands.size();
    for(int i = 0; i < commandsSize; i++) {
      String value = commands.get(i);
      System.out.println(value);
    }
} else if((input.substring(0, 3)).equals("open")) {
...
}

答案 1 :(得分:0)

您的代码在substring方法中出错,因为如果字符串少于4个字符,则该方法超出字符串的边界(或构成字符串的char数组)。在调用字符串对象上的方法之前,您还需要检查字符串是否为空。

要拥有与当前相同的流,但为了保护代码免受子字符串错误而不是null,您可以这样做:

if(input != null && input.equals("help")){
     //some code
} else if((input != null && input.length() >= 4) && (input.substring(0, 4)).equals("open")) {
    //some code
}