2

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

我做了一个java程序来读取文件。当我使用\nor拆分文件中的数据时System.getProperty("line.separator");。我看到很多行。

我在十六进制编辑器中发现该文件的换行符为“0A”(在 UNIX 中使用),它在记事本中显示为矩形。

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

有人知道吗?

4

3 回答 3

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为换行符的原因。

于 2012-07-13T07:21:27.347 回答
2

字符\n0a(回车)。如果您将 Windows 行分隔符拆分为\nonly,您将在 上拆分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
于 2012-07-13T07:21:47.173 回答
0

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

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

于 2012-07-13T07:17:34.717 回答