Windows 和 Linux 之间的行尾是否不同?[已关闭]

2022-09-01 12:33:39

我正在尝试在Java中解析Linux文件。我目前正在通过java.util.Scanner类读取每行,然后使用java.lang.String.split(String)来分隔每行。/etc/passwd

问题是该行:

list:x:38:38:Mailing List Manager:/var/list:/bin/sh" 

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

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

当我将其键入到一个我没有从Linux获得的新文件中时,请正确解析它。Scanner

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

显然,解决方法是在不使用扫描仪的情况下解析它,但它不会很优雅。有谁知道一种优雅的方法吗?

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


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

编辑

原作者注:

“我发现我有一个不同的错误导致问题。无视问题”


答案 1

来自维基百科

  • 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版本。


答案 2

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

System.getProperty("line.separator")