2016-07-13 75 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 
}