Java Scanner 分隔符和 System.in

标签 java

当我要求用户输入一些数字然后我想处理它们时,我遇到了一些问题。请看下面的代码。

为了让这个程序正常运行,我需要在末尾输入两个逗号,然后就可以了。如果我不在后面加上 2 个逗号,程序就不会结束,否则我会收到错误消息。

谁能帮我解决这个问题?最后输入那些逗号怎么办

package com.kurs;

import java.util.Scanner;

public class NumberFromUser {

    public static void main(String[] args) {
        String gd = "4,5,  6, 85";
        Scanner s = new Scanner(System.in).useDelimiter(", *");
        System.out.println("Input some numbers");
        System.out.println("delimiter to; " + s.delimiter());
        int sum = 0;
        while (s.hasNextInt()) {

            int d = s.nextInt();

            sum = sum + d;

        }
        System.out.println(sum);
        s.close();
        System.exit(0);

    }

}

最佳答案

您的程序在 s.hasNextInt() 中挂起。

来自Scanner类的文档:

The next() and hasNext() methods and their primitive-type companion methods (such as nextInt() and hasNextInt()) first skip any input that matches the delimiter pattern, and then attempt to return the next token. Both hasNext and next methods may block waiting for further input.

简而言之,扫描仪只是在等待最后一个整数之后的更多输入,因为它需要以正则表达式 ", *" 的形式找到您的定界符来确定最后一个整数是完全类型化的。

您可以在此讨论中阅读有关您的问题的更多信息:

Link to the discussion on stackoverflow

要解决此类问题,您可以更改程序以读取整个输入字符串,然后使用 String.split() 方法将其拆分。尝试使用这样的东西:

import java.util.Scanner;

public class NumberFromUser {

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String[] tokens = sc.nextLine().split(", *");

        int sum = 0;

        for (String token : tokens) {
            sum += Integer.valueOf(token);
        }

        System.out.println(sum);
    }

}

关于Java Scanner 分隔符和 System.in,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33724557/

相关文章:

java - 如何阅读 JSch 命令输出?

java - FileWriter 在文件末尾写入额外的空值

java - 如何使用安装程序创建 exec 并自动运行文件

java - LockModeType.PESSIMISTIC_WRITE 是否锁定结果行或整个表?

java - 为resteasy生成javascript

java - 如何在java中准备SOAP请求并调用Web服务

java - Hibernate和Mysql,事务自动提交只是一个部分

java - 如何将当前 boolean 值与先前值进行比较?

java - 我可以在同一实例中使用 WebSocketHandler 运行 WebAppContext 吗?

java - 如何从链表中删除随机选择的元素?