你如何保持scanner.next()不包括换行符?

时间:2016-04-16 20:55:53

标签: java io newline delimiter

我试图使用带有分隔符等于"的分隔符的scanner.next()来简单地读取文本文件中的单词。 "但是扫描仪包括带换行符的换行符/回车符。

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

文字档案

这是一个测试

查看if1这是否有效

OK!

代码:

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:工作

OK!

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

2 个答案:

答案 0 :(得分:5)

documentation of Scanner说:

  

扫描仪使用的默认空白分隔符由Character.isWhitespace

识别

链接的documentation of Character.isWhitespace说:

  

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

     
      
  • 它是一个Unicode空格字符(SPACE_SEPARATOR,LINE_SEPARATOR或PARAGRAPH_SEPARATOR),但也不是一个不间断的空格(' \ u00A0',' \ u2007',&#39 ; \ u202F&#39)
  • 。   
  • 这是' \ 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。
  •   
  • 这是U + 001D GROUP SEPARATOR。
  •   
  • 这是' \ u001E',U + 001E RECORD SEPARATOR。
  •   
  • 它是' \ u001F',U + 001F UNIT SEPARATOR。
  •   

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

答案 1 :(得分:1)

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

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

然后打印出字符串变量.. 那应该是诀窍