[英]Using a Scanner with a String Splitter
我正在嘗試使用字符串拆分器來顯示用戶輸入,例如要在控制台上顯示的1,2坐標。 運行代碼時沒有任何錯誤。 但是,我嘗試使用分離器似乎無效。
Scanner scanner = new Scanner(System.in);
System.out.println("Enter a row and column number at which to shoot (e.g., 2,3): ");
String[] coordinates = scanner.nextLine().split(",");
if (coordinates.length != 2) {
System.out.println("Please enter coordinates in the correct format.");
System.out.println("\nPlayer 1 Please take your turn:");
continue;
}
System.out.println("\nEnter Mine location:");
System.out.println("\nPlease Enter x position for your Mine:");
System.in.read(byt);
str = new String(byt);
row = Integer.parseInt(str.trim());
System.out.println("\nPlease Enter y position for your Mine:");
System.in.read(byt);
str = new String(byt);
col = Integer.parseInt(str.trim());
您對System.in.read(...)
是危險的代碼,並且沒有執行您認為正在做的事情:
System.in.read(byt); // *****
str = new String(byt);
row = Integer.parseInt(str.trim());
取而代之的是使用Scanner( 已經擁有的東西 getNextInt()
,然后在Scanner上調用getNextInt()
或獲取該行並對其進行解析。
另外,您永遠不要使用坐標數組中保存的字符串-如果忽略它們,為什么要獲取字符串?
您詢問:
Scanner scanner = new Scanner(System.in);
System.out.println("Enter a row and column number at which to shoot (e.g., 2,3): ");
str = scanner.nextInt().split(",");
但是然后看到編譯器不允許這樣做,因為您試圖在scanner.nextInt()
返回的int原語上調用方法。
我建議使用Scanner#nextInt()
來代替您對System.in.read(...)
濫用。 相反,如果您希望用戶在一行上輸入兩個數字,並用逗號隔開,那么最好是使用String.split(",")
,不過,我認為使用String.split("\\\\s*,\\\\s*")
可能更好String.split("\\\\s*,\\\\s*")
擺脫任何空白,例如周圍閑逛。 這樣,拆分應該適用於1,1
以及1, 2
和1 , 2
然后您可以通過Integer.parseInt(...)
解析數組中保存的項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.