2016-11-12 39 views
-1

編輯:所以,我現在有點修復它。剛剛添加了一個輸入長度驗證,它工作正常。做這樣的:儘管處於界限,但在字符串 - >字符轉換上出現越界錯誤

if(input.length() != 0){ 
} 

我有了這個方法,它在一個字符串,分割字符串,第一個字母轉換爲字符,然後評估它是否是一個字母或數字。令牌[]是1而不是0,因爲我接收的字符串有一個空格,當我調試時,「bench」變成了「」,「b」,「e」,「n」,「c」, 「H」。這很奇怪,因爲當我調試並通過該方法一切工作正常。爲什麼我得到這個錯誤?

當字符串爲「死提升」

// comments are exactly what debug gives me 
boolean isExerciseName(String input) { // input: "Dead-Lift" 
    String[] tokens = input.split(""); // tokens: {"", "D", "e", "a", "d", + 5 more} 

    boolean isExercise = true; // isExercise: true 

    char c = tokens[1].charAt(0); // c: 'D' 68 
    if (Character.isDigit(c)) { // c:'D' 68 
     isExercise = false; 
    } 

    return isExercise; 

} 

所以,很顯然我不是出界,因爲C變成「d」就像它應該。

錯誤,具體爲:

java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 

toCharArray似乎像更好的主意,所以這裏以這樣的形式:

boolean isExerciseName(String input) { 
    char[] tokens = input.toCharArray(); // tokens: {D, e, a, d, etc} 

    boolean isExercise = true; 

    char c = tokens[0]; // c: 'D' also, this is the line that errors out 
    if (Character.isDigit(c)) { 
     isExercise = false; 
    } 

    return isExercise; 

} 

我仍然得到錯誤

我也會出現錯誤,我稱之爲方法:

if(isExerciseName(itemString) && !itemKey.equals("private_journal)){ 

現在,我剛纔注意到的一件奇怪的事情是,如果我在調試時忽略錯誤信息而讓程序「等待」,它就會正常工作。我得到的輸入來自我的Firebase數據庫,因此可能在獲取該數據之前調用此方法?因此試圖調用空值的方法?

+0

你的分裂與空字符串的輸入,所以它當然不會拆分任何東西,你的令牌變種會是一個長度爲1的字符串數組,同時你要求回顧一下[1]。 Anywat toCharArray的方式http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#toCharArray() –

+0

@AntonioCalì我認爲split(「」)會分裂這個詞變成信件?調試表明這是正確的。 – theRealOne

+1

而不是使用拆分,你可以簡單地使用input.toCharArray()然後檢查第一個字符 –

回答

0

我已經使用這個固定:

if(input.length() != 0) 

再進的charAt結構