我试图/etc/passwd
用Java 解析Linux 文件.我正在阅读java.util.Scanner
课程中的每一行,然后java.lang.String.split(String)
用来分隔每一行.
问题是该行:
list:x:38:38:Mailing List Manager:/var/list:/bin/sh"
被扫描仪视为3条不同的线:
list:x:38:38:Mailing
List
Manager...
当我输入一个我没有从Linux获得的新文件时,Scanner
正确解析它.
有什么我不了解Linux中的新行吗?
显然,解决方法是在不使用扫描仪的情况下解析它,但它并不优雅.有谁知道这样做的优雅方式?
有没有办法将文件转换为可以使用的文件Scanner
?
甚至两天前:不同线路在不同平台结束的历史原因
编辑
原作者提供的说明:
"我发现我有一个不同的错误导致问题.无视问题"
Michael Hare.. 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版本.
来自维基百科:
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版本.
您可以从以下位置获取当前操作系统的标准行结尾:
System.getProperty("line.separator")