你怎么保持scanner.next()不包括换行符?

我试图简单地使用带有分隔符等于“”的scanner .next()读取文本文件中的单词,但扫描程序包含带有令牌的换行符/回车符。

我已经搜索了互联网,试图找到这个问题的一个很好的例子,但没有找到它所以我在这里发布它。 我在SO上发现了另一个类似的问题。 我还查看了有关扫描仪和模式的文档( http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html )但我仍然无法找到解决方法这个。

文本文件:

这是一个测试

看看if1这个,是否有效

好!

码:

int i = 0; String string; try(Scanner scanner = new Scanner(new File(filename))) { scanner.useDelimiter(" "); while(scanner.hasNext()) { string = scanner.next(); System.out.println(i++ + ": " + string); } }catch(IOException io_error) { System.out.println(io_error); } 

输出:

0:这个

1:是

2:a

3:测试

4:看

5:if1

6:这个,

7:是

8:工作

好!

如您所见,#3和#8有两个由换行符分隔的单词。 (我知道我可以将它们分成两个单独的字符串。)

Scanner的文档说:

扫描程序使用的默认空白分隔符由Character.isWhitespace识别

Character.isWhitespace的链接文档说:

根据Java确定指定的字符是否为空格。 当且仅当它满足以下条件之一时,字符才是Java空白字符:

  • 它是一个Unicode空格字符(SPACE_SEPARATOR,LINE_SEPARATOR或PARAGRAPH_SEPARATOR),但也不是一个不间断的空格(’\ u00A0’,’\ u2007’,’\ u202F’)。
  • 这是’\ t’,U + 0009 HORIZONTAL TABULATION。
  • 它是’\ n’,U + 000A LINE FEED。
  • 这是’\ u000B’,U + 000B VERTICAL TABULATION。
  • 它是’\ f’,U + 000C FORM FEED。
  • 这是’\ r’,U + 000D CARRIAGE RETURN。
  • 它是’\ u001C’,U + 001C FILE SEPARATOR。
  • 它是’\ u001D’,U + 001D GROUP SEPARATOR。
  • 它是’\ u001E’,U + 001E RECORD SEPARATOR。
  • 它是’\ u001F’,U + 001F UNIT SEPARATOR。

所以,只是不要设置任何特定的分隔符。 保持默认值,换行符将被视为分隔符,就像空格一样,这意味着令牌不会包含换行符。

string = scanner.next(); 替换\n

 string = string.replace("\n", ""); 

然后打印出字符串变量..这应该可以解决问题