使用带有字符串分割器的扫描仪

时间:2015-08-16 20:38:06

标签: java java.util.scanner

我正在尝试使用字符串拆分器来显示用户输入,例如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());

1 个答案:

答案 0 :(得分:2)

您使用System.in.read(...)是危险的代码,并没有按照您的想法行事:

System.in.read(byt); // *****
str = new String(byt);
row = Integer.parseInt(str.trim()); 

而是使用扫描仪,您已拥有的,并在扫描仪上调用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(","),但我认为使用{{1}可能更好摆脱任何空白,如悬空的空间。这样,拆分应该适用于String.split("\\s*,\\s*")以及1,11, 2,然后您可以通过1 , 2解析数组中保存的项目。

相关问题