[英]Java Scanner delimiter and System.in
当我要求用户输入一些数字然后我想处理它们时,我遇到了一些问题。 请看下面的代码。
为了使这个程序正常工作,我需要在结尾处输入两个逗号,然后就可以了。 如果我不放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类的文档:
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);
}
}
看起来你可以做一些像这样的事情。
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.