Windows和Linux之间的行结尾是否不同?

jbu*_*jbu 18 java linux newline

我试图/etc/passwd用Java 解析Linux 文件.我正在阅读java.util.Scanner课程中的每一行,然后java.lang.String.split(String)用来分隔每一行.

问题是该行:

list:x:38:38:Mailing List Manager:/var/list:/bin/sh" 
Run Code Online (Sandbox Code Playgroud)

被扫描仪视为3条不同的线:

  1. list:x:38:38:Mailing
  2. List
  3. Manager...

当我输入一个我没有从Linux获得的新文件时,Scanner正确解析它.

有什么我不了解Linux中的新行吗?

显然,解决方法是在不使用扫描仪的情况下解析它,但它并不优雅.有谁知道这样做的优雅方式?

有没有办法将文件转换为可以使用的文件Scanner


甚至两天前:不同线路在不同平台结束的历史原因

编辑

原作者提供的说明:

"我发现我有一个不同的错误导致问题.无视问题"

Mic*_*ren 47

来自维基百科:

  • LF:Multics,Unix和类Unix系统(GNU/Linux,AIX,Xenix,Mac OS X,FreeBSD等),BeOS,Amiga,RISC OS等
  • CR + LF:DEC RT-11和大多数其他早期非Unix,非IBM操作系统,CP/M,MP/M,DOS,OS/2,Microsoft Windows,Symbian OS
  • CR:Commodore机器,Apple II系列,Mac OS,最高版本9和OS-9

我翻译成这些行结束这个一般:

  • 视窗: '\r\n'
  • Mac(OS 9-): '\r'
  • Mac(OS 10+): '\n'
  • 在Unix/Linux: '\n'

您还需要让扫描仪/解析器处理unix版本.


Cha*_*ert 10

您可以从以下位置获取当前操作系统的标准行结尾:

System.getProperty("line.separator")
Run Code Online (Sandbox Code Playgroud)

  • 还是`System.lineSeparator()`? (5认同)