2

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

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

如果我有这个输入

美国广播公司

输出将是

AB

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

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

4

3 回答 3

5

如果Scanner没有等待你输入另一个-,那么它会错误地假设你已经完成了输入。

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

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

当您以 full 传递它时StringScanner知道输入的结尾在哪里,并且不需要等待另一个分隔符。

我将如何做如下:

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

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

这是String.split()文档的链接,供您阅读。

于 2010-08-16T12:53:30.617 回答
3

您可以使用替代分隔符字符串useDelimiter( "-|\n" ); 它与 String 参数一起使用,也可以从System.in. 如果是 System.in,这需要您在行尾按 Enter。

于 2010-08-16T13:00:33.050 回答
0

我将如何做如下:

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

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

于 2017-03-03T09:56:33.443 回答