Java 扫描仪,使用分隔符

Java 扫描仪,使用分隔符,java,java.util.scanner,Java,Java.util.scanner,我在使用Scanner类中的useDelimiter时遇到一些问题 Scanner sc = new Scanner(System.in).useDelimiter("-"); while(sc.hasNext()) { System.out.println(sc.next()); } 如果我有这个输入 A-B-C 输出将是 A B 然后等到我再输入一个“-”,它就会打印出最后一个字符 但是,如果我不让用户输入数据,而是向扫描器插入一个字符串,代码就会工作。原因是什么?我该如何修复它?

我在使用Scanner类中的useDelimiter时遇到一些问题

Scanner sc = new Scanner(System.in).useDelimiter("-");
while(sc.hasNext())
{
    System.out.println(sc.next());
}
如果我有这个输入

A-B-C

输出将是

A B

然后等到我再输入一个“-”,它就会打印出最后一个字符


但是,如果我不让用户输入数据,而是向扫描器插入一个字符串,代码就会工作。原因是什么?我该如何修复它?我不想使用StringTokenzier

如果
扫描器
没有等待您输入另一个
-
,那么它会错误地认为您已经输入完毕

我的意思是,
扫描仪必须等待您输入
-
,因为它无法知道下一次输入的长度

因此,如果用户想要键入
a-B-CDE
,而您在
C
处停下来喝了一口咖啡,它将无法获得正确的输入。(您期望
[A,B,CDE]
,但它会得到
[A,B,C]

当您以完整的
字符串
传递它时,
扫描器
知道输入的结尾在哪里,不需要等待另一个分隔符


我将如何做到这一点:

Scanner stdin = new Scanner(System.in);
String input = stdin.nextLine();
String[] splitInput = input.split("-", -1);
Scanner stdin = new Scanner(System.in);
String s = stdin.nextLine();
String[] splitInput = s.split("-", -1);
现在您将拥有一个
字符串数组
,其中包含所有
-
之间的数据


您可以使用另一个分隔符字符串
使用分隔符(“-\n”)
它可以与字符串参数一起工作,也可以从
系统中读取。

在System.In的情况下,这要求您在该行末尾按enter键。

我将如何执行以下操作:

Scanner stdin = new Scanner(System.in);
String input = stdin.nextLine();
String[] splitInput = input.split("-", -1);
Scanner stdin = new Scanner(System.in);
String s = stdin.nextLine();
String[] splitInput = s.split("-", -1);

现在,您将拥有一个包含所有
-
之间数据的
字符串数组。

因此,除了使用一个接受完整输入的扫描器和另一个解析输入的扫描器外,别无选择。@klw,您只需要一个
扫描器。
。String.split是否也会在字符串数组中添加空白?我以前使用split时记忆模糊。@klw,没有。如果你有字符串
“A-B-C-D”。split(“-”)
你会得到数组
[“A”,“B”,“C”,“D”]