【问题标题】:Reading a text file in java, want to check what kind of line break it uses在java中读取文本文件,想检查它使用什么样的换行符
【发布时间】:2015-10-23 19:28:10
【问题描述】:

给了我两个文本文件,一个使用 \n 作为换行符,另一个使用 \r\n。我只想能够检查这两个中的哪一个。我想使用 BufferedReader 逐个字符读取并搜索 \(使用 \)然后检查下一个字符是什么,但是当我在 txt 文件中搜索任何 \s 时,我没有得到任何结果,循环刚刚结束。

现在,我只是试图通过打印出 \ 及其后面的任何字符来进行测试,所以我应该在运行文件时打印出一堆 \n 或 \r,但我只是完成了打印。有什么建议吗?

char x;
  while(reader.ready())
  {
    x = (char) reader.read();
    if(x == '\\')
         System.out.println(x + "" + (char) reader.read());             
  }
System.out.println("Done");

【问题讨论】:

  • reader.read() 不返回 int 吗?难道你不能寻找 \r 和 \n 的整数值吗? techonthenet.com/ascii/chart.php 这表明值 10 和 13 分别是换行符和回车符。
  • 你对 '\n' 和 '\r' 是什么感到困惑。它们是单个字符,而不是两个字符。 '\n' 的值为 ASCII 值 10,'\r' 的值为 13。

标签: java escaping line-breaks


【解决方案1】:

您混淆了一个字符 \r 和一个由两个字符 \r 组成的字符串。下面的代码应该适合你:

char charValue;
while ((charValue = (char) reader.read()) != -1) {
    if ('\n' == charValue) {
        System.out.println("\\n");              
    }    
    if ('\r' == charValue) {
        System.out.println("\\r");              
    }           
}

【讨论】:

    【解决方案2】:

    查看您正在解析的文本类型会很有用。

    例如,如果您的文件如下所示:

    The lazy brown dog\n jumped over the fox.\n
    

    您当前的代码应该可以工作。但是,如果文件看起来像这样:

    The lazy brown dog
    jumped over the fox
    

    您的代码不会。第二个文件实际上不包含字符“\”。相反,它包含一个换行和回车,或者只是一个换行。如果您正在测试 '\n' 您实际上想要测试字符 0x0A(或字符 10)。您可能想对此进行测试。

    我的建议是确保您正在测试正确的角色。如果您是,那么发布您正在解析的文件的示例将有助于使问题更清晰。

    (我知道这可能应该是评论而不是答案,但我现在不能发布 cmets)。

    【讨论】:

      猜你喜欢
      • 2012-10-04
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      相关资源
      最近更新 更多