java - 如何使用 Scanner 从 {int :int}? 中提取整数

标签 java string java.util.scanner

我必须从标准输入读取整数,它采用以下格式:

{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/

相关文章:

没有公共(public)分隔符的Python字符串拆分

java - Typesafe Activator : "run" works, 但 "start"失败并出现错误

java - 当尝试运行代码时,我得到 "Does Not Have Main Method Error"

Ruby:计算 float 中的数字

java - 如何使用 Selenium 和 Java 自动访问附加用户提供的语言的 url?

java - 如何在 Java 中不使用 nextLine() 的情况下在 next() 中包含空格

java - 扫描仪system.in,不读取第1、3、5等输入

java - 为什么我们在 Assertj Swing 测试中偶尔会失败?

java - 接受右值引用作为参数的方法的 Swig 行为

c++ - 如何修复编译错误 "This function or variable may be unsafe"(strcpy)