2016-07-13 50 views
0

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

我的代码是:

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")) { 
... 
} 
+0

简单可能是'input.startsWith(“开放” )'。 – chrylis

+0

究竟是什么错误?在哪行代码? – Bohemian

+0

@Bohemian线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:4.这是如果您放入少于4个字母的字符串 –

回答

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")) { 
... 
} 
+0

第一个if语句在到达子串部分之前是否会捕获它? –

+0

如果输入的长度不等于4,它将在if块中停止。如上所述,它将只打印出一些文本并继续到下一个子串部分。取决于你想要什么,你可以但是如果下一个if else else,则从最初的内部退出等等。 – user1875195

0

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

具有相同的流量,你目前有,但要防止的子错误代码,而不是被空,你可以这样做:

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