簡體   English   中英

無法讓 charAt(0) 工作

[英]Can't get charAt(0) to work

好的,所以我似乎無法讓它工作,盡管很多人告訴我語法和邏輯是正確的。 誰能告訴我我可能做錯了什么?

public Scanner in = new Scanner(System.in);

public void movePlayer() {
    System.out.print("move: ");
    String str = in.nextLine();

    in.nextLine();

    char c = str.charAt(0);

    if (c == 'l' || c == 'L') {
        player.moveLeft();
    }
 }

程序在 char c = str.charAt(0);處被捕獲c = str.charAt(0);

我被返回這個錯誤:

java.lang.StringIndexOutOfBoundsException:字符串索引超出范圍:0(在 java.lang.String 中)

您沒有通過控制台輸入任何內容,因此str為空。 這就是chatAt(0)拋出異常的原因

您不想使用nextLine() 您想使用next()

String str = in.next();

這是nextLine()的 Javadoc

將此掃描器推進到當前行並返回被跳過的輸入。 此方法返回當前行的其余部分,不包括末尾的任何行分隔符。 位置設置為下一行的開頭。

你想要next()代替:

從此掃描器中查找並返回下一個完整的令牌。 一個完整的標記前后是與分隔符模式匹配的輸入。 此方法可能會在等待輸入掃描時阻塞,即使之前對 hasNext() 的調用返回 true。

這將阻止您使用空行並引發異常。

這意味着str為空。 您應該檢查它是否不為null且不為空。

if (str != null && !str.isEmpty()) {
...
}

那是 ryt .. 因為當你嘗試在第 0 個位置獲取char ,它會拋出異常,因為 f 數組的大小為 0。

你可能是為了從命令行獲取I/O 而閱讀這篇文章嗎?

添加對 Empty String 和 Null 的檢查。 您將避免很多頭痛。

如果在控制台中按 Enter 鍵,則無論是否輸入文本, Scanner都將被視為整行。

在一行的開頭按 Enter,將字符串""返回到方法Scanner.nextLine()

str.charAt(0)之前添加一個帶有str.lenght () > 0的檢查。

使用in.next()代替。 無論出於何種原因, nextLine()不工作CharAt()的時候。

暫無
暫無

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

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