【问题标题】:Using useDelimiter() with a text file将 useDelimiter() 与文本文件一起使用
【发布时间】:2015-12-11 19:17:08
【问题描述】:

我正在尝试使用 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

有人知道这个问题吗?

【问题讨论】:

  • 你试过\n作为你的分隔符
  • 扫描仪按预期工作。您可以像这样从标记中删除换行符:System.out.println(filein.next().replaceAll("\\r|\\n", ""));.
  • 谢谢,我在继续我的代码时也会考虑到这一点。

标签: java regex java.util.scanner


【解决方案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 字符类,它表示像 \r\n \r 和其他一些分隔符。

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

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

【讨论】:

  • 啊,我不知道依赖操作系统的行分隔符在 Java 中也是一个问题,谢谢您的回复。添加 .replaceAll("\\R","") 效果很好,谢谢。
猜你喜欢
  • 2015-05-31
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
相关资源
最近更新 更多