[英]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()) {
...
}
添加對 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.