扫描仪,使用Delimiter

时间:2010-08-16 12:48:32

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

并等到我输入另一个“ - ”,以便打印出最后一个字符

但是,如果我没有用户输入数据,而是将字符串插入扫描程序,则代码将起作用。它是什么原因,我该如何解决?我不想使用StringTokenzier

3 个答案:

答案 0 :(得分:5)

如果Scanner没有等你输入另一个-,那么它会错误地认为你输入了输入。

我的意思是,Scanner必须等待您输入-,因为它无法知道下一个输入的长度。

因此,如果用户想要输入A-B-CDE并且您停止在C喝一口咖啡,那么它就无法获得正确的输入。 (您期望[ A, B, CDE ],但会得到[ A, B, C ]

当你以完整的String传递它时,Scanner知道输入结束的位置,而不需要等待另一个分隔符。

我将如何做到:

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

现在,您将拥有一个Strings数组,其中包含所有-之间的数据。

Here is a link to the String.split() documentation for your reading pleasure.

答案 1 :(得分:3)

您可以使用替代分隔符字符串useDelimiter( "-|\n" ); 它适用于String参数以及从System.in读取。 如果是System.in,则需要您在行尾按Enter键。

答案 2 :(得分:0)

我将如何做到:

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

现在,您将拥有一个Strings数组,其中包含所有-之间的数据。