我必须从标准输入读取整数,它采用以下格式:
{4:11},{23:29},{1:7}...
我尝试使用扫描仪分隔符,但我认为第一个“{”有问题
Scanner scanner = new Scanner(System.in).useDelimiter("\\D");
while (scanner.hasNext()){
int x = scanner.nextInt();
int y = scanner.nextInt();
}
我得到这个异常:
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at Algorithm.main(Algorithm.java:63)
最佳答案
您正在使用以下内容指定分隔符模式
scanner.userDelimiter("\\D"); // This \\D is pattern which will be matched.
您需要指定如下模式:
scanner.userDelimiter("\\D+") // With + keyword you are saying that it can be 1 or more.
最新的工作代码应如下所示:
Scanner scanner = new Scanner(System.in).useDelimiter("\\D+");
while(scanner.hasNext()){
int x = scanner.nextInt();
int y = scanner.nextInt();
System.out.println("x: " + x);
System.out.println("y: " + y);
}
另一个示例是使用正则表达式显式解析字符串,如果您只想查找分隔符模式匹配,则可能不需要这样做。
注意:由于您使用了 nextInt(),并且没有验证输入,因此如果存在无效输入(不同的输入不包含 int),那么您将得到异常
关于java - 如何使用 Scanner 从 {int :int}? 中提取整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54054565/