Java Scanner分隔符和System.in

时间:2015-11-15 20:20:18

标签: 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);

    }

}

4 个答案:

答案 0 :(得分:3)

你的程序挂在 s.hasNextInt()

来自扫描仪类的文档:

  

next()和hasNext()方法及其原始类型的伴侣   方法(如nextInt()和hasNextInt())首先跳过任何输入   匹配分隔符模式,然后尝试返回下一个   令牌。 hasNext和next方法都可能阻止等待进一步   输入

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

您可以在此讨论中详细了解您的问题:

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);
    }

}

答案 1 :(得分:0)

看,你可以做一些像这样的事情。

public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("Input some numbers");
        System.out.println("When did you to finish and get the total sum enter ,, and go");
        boolean flag = true;
        int sum = 0;
        while (s.hasNextInt() && flag) {

            int d = s.nextInt();
            sum = sum + d;
        }

        System.out.println(sum);

    }

答案 2 :(得分:0)

尝试允许行尾作为分隔符:

Scanner s = new Scanner(System.in).useDelimiter(", *|[\r\n]+");

答案 3 :(得分:0)

我稍微改变了你的解决方案,可能我的解决方案并不是最好的,但似乎有效:

    Scanner s = new Scanner(System.in);
    System.out.println("Input some numbers");
    int sum = 0;
    if (s.hasNextLine()) {
        // Remove all blank spaces
        final String line = s.nextLine().replaceAll("\\s","");

        // split into a list
        final List<String> listNumbers = Arrays.asList(line.split(","));

        for (String str : listNumbers) {
            if (str != null && !str.equals(""))  {
            final Integer number = Integer.parseInt(str);
            sum = sum + number;
            }
        }
    }
    System.out.println(sum);