我想知道当我在记事本中打开文件时。我看到一条没有任何回车/换行的连续线。
我制作了一个java程序来读取文件。当我使用\n
或System.getProperty("line.separator");
从文件中分割数据时。我看到很多行。
我在十六进制编辑器中发现该文件对于新行(在UNIX中使用)具有'0A',并且它在记事本中显示为矩形。
好吧,我的问题是,如果它没有'0D'和'OA'(在Windows中用于回车和换行)。我的java程序如何将数据拆分成行?它不应该拆分它。
有人有任何想法吗?
答案 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)
字符\n
为0a
(回车)。如果您按\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)