【问题标题】:Java parsing text file and preserving line breaks?Java解析文本文件并保留换行符?
【发布时间】:2011-09-17 14:33:54
【问题描述】:

我一直在研究如何做到这一点并变得有点困惑,到目前为止我已经尝试过使用 Scanner 但这似乎并没有保留换行符,我无法弄清楚如何让它确定一行是否是越线。如果有人有任何建议,我将不胜感激。我一直在使用如下 Scanner 类,但不知道如何检查该行是否为新行。谢谢

    for (String fileName : f.list()) {

            fileCount++;

            Scanner sc = new Scanner(new File(f, fileName));
            int count = 0;
            String outputFileText = "";

            //System.out.println(fileCount);

            String text="";
            while (sc.hasNext()) {

                String line = sc.nextLine();
            }
}

【问题讨论】:

  • 检查该行是否为新行是什么意思? Scanner.nextLine() 已经为您将文件分成几行,因此您所要做的就是扫描您获得的每一行以查找值等。
  • 如果你使用的是 BufferedWriter,你也可以使用 .newline 方法:stackoverflow.com/questions/9199216/…

标签: java regex parsing file


【解决方案1】:

如果您只是想读取文件,我建议您改用LineNumberReader

LineNumberReader lnr = new LineNumberReader(new FileReader(f));
String line = "";
while(line != null){
    line = lnr.readLine();
    if(line==null){break;}
    /* do stuff */
}

【讨论】:

  • 我需要逐行阅读它,然后我用该行做一些事情来检查值(使用正则表达式)。谢谢我会看看LineNumberReader
  • Chuck 指出,超类BufferedReader 提供了类似的功能。 (如果我必须制作错误消息,我只想知道我在哪一行。)
  • 所以如果它选择一个换行符(例如 \n )我可以将它传递给我正在创建的输出字符串?
  • readLine() 的返回值不应包含任何换行符。 (即\r\n\n\r。)如果readline() == "" 则您知道它看到了一行末尾有only 换行符且没有其他内容的行。如果您尝试测试包含 \r\n(来自 windows)与 \n(unix 风格)的行,那么这对您没有帮助,因为它对它们的处理方式都是一样的。
【解决方案2】:

Java 的 Scanner 类已经为您将其分成几行,即使该行是一个空字符串。您只需再次扫描这些行即可获得您的值:

Scanner lineScanner;
while(sc.hasNext())
{
    String nextInputLine = sc.nextLine();

    lineScanner = new Scanner(nextInputLine);

    while(lineScanner.hasNext())
    {
        //read the values
    }
}

【讨论】:

    【解决方案3】:

    您可能想使用BufferedReader#readLine

    【讨论】:

    • BufferedReader#readLine 的Javadoc,特别指出换行符被删除。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    相关资源
    最近更新 更多