将useDelimiter()与文本文件一起使用

时间:2015-09-15 13:40:53

标签: java regex java.util.scanner

我正在尝试使用useDelimiters()按某个分隔符而不是每个新行分割文本文件。例如,在下面的代码中,我有这个文本文件输入,我想在句号中分成两个:

hellothere
stop.hereok
asdf

我的代码:

public static void main(String[] args) throws FileNotFoundException {
    File text = new File("test.txt");
    Scanner filein = new Scanner(text).useDelimiter("\\.");
    System.out.println(filein.next());
    System.out.println(filein.next());
}   

我的输出:

hellothere
stop
hereok
asdf

预期产出:

hellotherestop
hereokasdf

有人知道这个问题吗?

1 个答案:

答案 0 :(得分:1)

如果您的文件包含文字

hellothere
stop.hereok
asdf

这意味着它包含代表行分隔符的字符(\n \r\r\n,具体取决于操作系统)。打印文本直到点分隔符也会打印这些行分隔符,这意味着第一个

System.out.println(filein.next());

将打印

hellothere //<-here exists line separator character(s)
stop       //and here was dot, or end of your text

如果您希望在没有行分隔符的情况下打印hellotherestop,则需要手动删除它们。

从Java 8开始,您可以使用\R字符类添加到regex引擎,该引擎代表\r\n \r之类的分隔符以及其他几个。

System.out.println(filein.next().replaceAll("\\R",""));

如果您使用的是旧版Java,可以尝试使用replaceAll("\r?\n|\r","")