如何在没有换行符的情况下扫描文本中的单词?

时间:2013-12-21 11:33:36

标签: java java.util.scanner next

我有严重的问题需要了解扫描仪类的工作原理。的确,我想从这个输入中得到:

AAAA BBBG GREZZ

ADFG GTRE

FREZZ

将此输出作为ArrayList: [AAAA,BBBG,GREZZ,ADFG,GTRE,FREZZ]

我的代码如下:

System.out.println("list of words?");
Scanner scan3 = new Scanner(System.in);
scan3.useDelimiter("[\\s+\\n]");
ArrayList<String> test = new ArrayList<String>();
while(scan3.hasNext()){
  String temp = scan3.next();
  if(temp.equals("STOP")){
     break;
  }else{
     test.add(temp);
  }
}
System.out.println(test);

我的意见是:

AAAA BBBG GREZZ

ADFG GTRE

FREZZ STOP

我的输出是: [AAAA,BBBG,GREZZ,ADFG,GTRE,FREZZ]

我的问题有两个:

  • 为什么我在列表中插入了一个空元素(我认为这与新行有关)?
  • 你可能已经注意到了,我添加了字符串&#34; STOP&#34;最后为了停止循环因为条件scan3.HasNext()总是返回&#34; true&#34;,它是唯一的继续进行的方式吗?

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

只需使用String#split()和合适的分隔符(听起来好像在这种情况下你需要"[ \\n]+"(这是一个空格和\ n),但你可能想稍微调整一下,例如你可能想要在所有空格上拆分。

列表中空条目的原因是因为您只是扫描空格的单个字符。如果两个行结尾彼此相邻,则会匹配两次。您需要修改正则表达式,使其匹配多个字符。

答案 1 :(得分:0)

您的+似乎位于错误的位置。请尝试使用scan3.useDelimiter("[\\s\\n]+");

关于,

  

您可能已经注意到,我在末尾添加字符串“STOP”以停止循环,因为条件scan3.HasNext()始终返回“true”,它是唯一的继续进行的方式吗?

您希望采用哪种其他方式?你建议使用什么其他停止条件?