簡體   English   中英

無法弄清楚為什么我得到了StringIndexOutOfBoundsException

[英]Can't figure out why I'm getting a StringIndexOutOfBoundsException

我有以下代碼

while (input.hasNextLine()) {
    String line = input.nextLine();
    System.out.println(line);  // added to test if anything in String, and there is
    int whiteSpace = 0;
    int j = 0;

    while (Character.isWhitespace(line.charAt(j))) {
        whiteSpace++;
        j++;
    }
}

當我運行它時,我得到StringIndexOutOfBoundsException: String index out of range: 0 ,這對我來說毫無意義。 我添加了System.out.print(line)來測試String中是否有任何東西。 我嘗試使用較高的值初始化j ,但仍然得到相同的結果,只是另一個String index out of range: ? 有誰知道我為什么要得到這個例外? 對我來說毫無意義。

嘗試更多類似這樣的方法:

while(j<line.length) {
    if(Character.isWhitespace(line.charAt(j))) {
        whiteSpace++;
    }
    j++;
}

它可能更接近您要執行的操作。 如果能正常工作,那么現在擁有的東西只會在存在whiteSpace時遞增j ,因此,即使沒有出現錯誤,也將陷入無限循環,除非您擁有包含以下內容的String :只有空格。 上面的代碼將增加j在每一個字符(所以你通過整個字符串一次且僅一次檢查每一個角色),但增加whiteSpace只有當Character.isWhitespace(line.charAt(j))返回true

編輯:考慮到您實際要執行的操作,請重新添加變量j因為它會影響可讀性(因此我感到困惑)。

while(whiteSpace<line.length && Character.isWhitespace(line.charAt(whiteSpace)))
    { whiteSpace++; }

我不知道您的路線是什么,但是您應該嘗試:

while (j < line.length() && Character.isWhitespace(line.charAt(j))) {
    whiteSpace++;
    j++;
}

可能是因為您要遞增j ++,然后在其中使用它:

Character.isWhitespace(line.charAt(j))

如果在線上只有一個字符,即空格,那么在下一次迭代時,它將嘗試到達不存在的下一個字符。

因此,您可能必須檢查char是否不為null,然后檢查它是否為空格。 如果下一個字符為null,則制動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM