在java中的换行字符阅读

时间:2012-07-13 07:10:25

标签: java carriage-return linefeed

我想知道当我在记事本中打开文件时。我看到一条没有任何回车/换行的连续线。

我制作了一个java程序来读取文件。当我使用\nSystem.getProperty("line.separator");从文件中分割数据时。我看到很多行。

我在十六进制编辑器中发现该文件对于新行(在UNIX中使用)具有'0A',并且它在记事本中显示为矩形。

好吧,我的问题是,如果它没有'0D'和'OA'(在Windows中用于回车和换行)。我的java程序如何将数据拆分成行?它不应该拆分它。

有人有任何想法吗?

3 个答案:

答案 0 :(得分:5)

Java内部使用Unicode。

  

Unicode标准定义了大量字符   符合要求的申请应该被认为是行终止者:[3]
  LF:换行,U + 000A
  VT:垂直标签,U + 000B
  FF:换模,U + 000C
  CR:回车,U + 000D
  CR + LF:CR(U + 000D),然后是LF(U + 000A)
  NEL:下一行,U + 0085
  LS:线分离器,U + 2028
  PS:段落分隔符,U + 2029

http://en.wikipedia.org/wiki/Newline) 这就是为什么它将\n解释为换行符。

答案 1 :(得分:2)

字符\n0a(回车)。如果您按\n分割Windows行分隔符,则只会在0a上拆分,而0d个字符会被删除。

记事本将0a显示为正方形,但它会将0d0a呈现为换行符。

以下是在Windows上使用Scala(它是Java的封面)的示例:

scala> "123\n456".split(System.getProperty("line.separator")).length
res1: Int = 1

scala> "123\n456".split("\r\n").length  // same as the line above on Windows
res2: Int = 1

scala> "123\n456".split("\n").length
res3: Int = 2

答案 2 :(得分:0)

在处理任何类型的文本文件时,都要强烈避免使用Windows记事本 我建议使用Notepad++

他不仅可以很好地显示您的文字,而且还具有在UTF-8BOM中编码文件的功能:D