Java Scanner.hasNextLine()不';你没发现空行吗?
假设我有以下文件Java Scanner.hasNextLine()不';你没发现空行吗?,java,Java,假设我有以下文件 Hej Hej Hej A A A A 在a的线后面有一个断线 我的问题是代码 while (in.hasNextLine()) { String line = in.nextLine(); if (in.hasNextLine()) { out.println(line); } else { out.print(line); } } 在.hasNextLine()中未检测到此额外行,因此我错过了输出文
Hej Hej Hej
A A A A
在a的线后面有一个断线
我的问题是代码
while (in.hasNextLine()) {
String line = in.nextLine();
if (in.hasNextLine()) {
out.println(line);
}
else {
out.print(line);
}
}
在.hasNextLine()中未检测到此额外行,因此我错过了输出文件中的换行符(我正在执行文件连接程序)。问题可能是什么?调用
.hasNextLine()
两次,而只读取一次“下一行”
您的代码应该是:
while (in.hasNextLine()) {
String line = in.nextLine();
out.println(line);
}
或者,如果您想再次检查循环中是否存在下一行,您应该这样做(我发现这不够干净,因为它与上面的代码片段完全相同):
调用
.hasNextLine()
两次,而只读取一次“下一行”
您的代码应该是:
while (in.hasNextLine()) {
String line = in.nextLine();
out.println(line);
}
或者,如果您想再次检查循环中是否存在下一行,您应该这样做(我发现这不够干净,因为它与上面的代码片段完全相同):
Scanner.getLine()
读取当前行上的所有字符,包括行终止符(如果有),然后丢弃行终止符。使用此方法,无法知道文件是否以行终止符结尾
如果您正在编写文件连接程序,为什么要逐行读取?这样做可能导致数据丢失;例如,输出文件将使用平台默认的行终止符(例如“\r\n”或“\n”),而不管输入文件使用的是哪一行终止符
以字节流的形式读写文件更有意义,例如使用InputStream.read(byte[])
。更好的方法是使用java.nio.file.Files.copy(Path-source,OutputStream-out)
,它是Java7中新引入的,可以为您完成所有的艰苦工作
但是,需要注意的是,如果要连接的文件是具有不同字符编码的文本文件,则需要将它们转换为在输出文件中使用相同编码的所有文件。在这种情况下,请使用文件读取器和写入程序。Scanner.getLine()
读取当前行上的所有字符,包括行终止符(如果有),然后丢弃行终止符。使用此方法,无法知道文件是否以行终止符结尾
如果您正在编写文件连接程序,为什么要逐行读取?这样做可能导致数据丢失;例如,输出文件将使用平台默认的行终止符(例如“\r\n”或“\n”),而不管输入文件使用的是哪一行终止符
以字节流的形式读写文件更有意义,例如使用InputStream.read(byte[])
。更好的方法是使用java.nio.file.Files.copy(Path-source,OutputStream-out)
,它是Java7中新引入的,可以为您完成所有的艰苦工作
但是,需要注意的是,如果要连接的文件是具有不同字符编码的文本文件,则需要将它们转换为在输出文件中使用相同编码的所有文件。在这种情况下,请使用文件读取器
和写入器。输出。打印
应该是第一个代码段中的输出。打印ln
。这不会区分以换行结尾的文件和最后一行未终止的文件。我想这就是OP想要做的。@KlitosKyriacou是的,这就是我想要做的。out.print
应该是out.println
,在你的第一个代码片段中。这并不区分以换行结束的文件和最后一行未终止的文件。我想这就是OP想要做的。@KlitosKyriacou是的,这就是我想要做的