2010-08-16 171 views
2

我使用从扫描仪类useDelimiter时遇到的一些问题。扫描仪,useDelimiter

Scanner sc = new Scanner(System.in).useDelimiter("-"); 
while(sc.hasNext()) 
{ 
    System.out.println(sc.next()); 
} 

如果我有这个输入

A-B-C

的输出将是

A B

并等待,直到我在另一种类型的“ - ”它打印出来的最后一个字符

但是,如果我不是有用户输入数据,并插入一个字符串到扫描仪,而不是代码将工作。这是什么原因,我该如何解决?我不想使用StringTokenzier

回答

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数组包含所有- S的之间的数据。

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

+0

所以有解决此,但没有办法用一个扫描仪这需要完整输入,另有扫描仪,其分析输入? – starcorn 2010-08-16 12:59:40

+0

@klw,我会告诉你如何在编辑中做到这一点。 – jjnguy 2010-08-16 13:01:34

+0

@klw,你只需要1个'Scanner'。 – jjnguy 2010-08-16 13:03:29

3

你可以使用一个替代分隔字符串useDelimiter("-|\n"); 它与一个字符串参数,以及由System.in阅读。 在System.in的情况下,这需要你按在该行的末尾输入。

0

我会怎么做如下:

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

现在,您将有Strings数组包含所有- S的之间的数据。