Java扫描程序分隔符和System.in

Java扫描程序分隔符和System.in,java,Java,当我要求用户输入一些数字,然后我想处理它们时,我遇到了一些问题。请看下面的代码 为了使这个程序正常工作,我需要在末尾输入两个逗号,然后就可以了。如果我没有在中间加两个逗号,那么程序就不想完成,否则我会出错 有人能帮我吗?我应该怎么做才能不在末尾输入逗号 package com.kurs; import java.util.Scanner; public class NumberFromUser { public static void main(String[] args) {

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

为了使这个程序正常工作,我需要在末尾输入两个逗号,然后就可以了。如果我没有在中间加两个逗号,那么程序就不想完成,否则我会出错

有人能帮我吗?我应该怎么做才能不在末尾输入逗号

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

    }

}

听着,你可以做这样的事情

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

    }

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

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

我对您的解决方案做了一些更改,可能我的解决方案不是最好的,但它似乎有效:

    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);
Scanner s=新的扫描仪(System.in);
System.out.println(“输入一些数字”);
整数和=0;
如果(s.hasNextLine()){
//删除所有空格
最后一行字符串=s.nextLine().replaceAll(“\\s”,即“”);
//分成一个列表
最终列表listNumbers=Arrays.asList(line.split(“,”);
用于(字符串str:listNumbers){
如果(str!=null&!str.equals(“”){
最终整数=Integer.parseInt(str);
总和=总和+数字;
}
}
}
系统输出打印项数(总和);

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

扫描仪的文档中类:

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

简而言之,扫描程序只是在最后一个整数之后等待更多输入,因为它需要找到正则表达式形式的分隔符,*“,以确定最后一个整数是完全类型的

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

要解决此问题,您可以将程序更改为读取整个输入字符串,然后使用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);
    }

}

在你的循环中,虽然你可以永远不受限制,但这两个逗号会迫使你退出循环。你应该有一些whil循环的限制,或者从循环中退出一些东西。谢谢你的代码,但我想知道如何使用“,”delimeter和while loop来完成这项工作。非常感谢。它解释了一切:)非常有用的回答我!