Java 如果最后一行为空,扫描仪无法捕获最后一个换行符
我正在学习一门编程课,我们必须用哈夫曼树压缩一个文件并解压缩它 我遇到了一个问题,无法捕获txt文件的最后一个换行符。 例如 因此,如果我在一个文件中压缩和解压上面的文本,我将得到一个包含以下内容的文件Java 如果最后一行为空,扫描仪无法捕获最后一个换行符,java,Java,我正在学习一门编程课,我们必须用哈夫曼树压缩一个文件并解压缩它 我遇到了一个问题,无法捕获txt文件的最后一个换行符。 例如 因此,如果我在一个文件中压缩和解压上面的文本,我将得到一个包含以下内容的文件 This is a line This is a secondline 现在我正在做 while(Scanner.hasNextLine()){ char[] cArr = file.nextLine().toCharArray(); //count amount of
This is a line
This is a secondline
现在我正在做
while(Scanner.hasNextLine()){
char[] cArr = file.nextLine().toCharArray();
//count amount of times a character appears with a hashmap
if(file.hasNextLine()){
//add an occurrence of \n to the hashmap
}
}
我知道问题是最后一行技术上没有“Scanner.hasNextline()”,因为我刚刚通过nextLine()调用使用了文件的最后一个“\n”。当我意识到我已经尝试用useDelimiter(“”)和Scanner.next()代替Scanner.nextLine()时,这两种方法仍然会导致类似的问题 有没有办法解决这个问题?
提前感谢。不要完全更改代码或方法,使用似乎很有效
File testfile = new File("test.txt");
StringBuilder stringBuffer = new StringBuilder();
try{
BufferedReader reader = new BufferedReader(new FileReader(testfile));
char[] buff = new char[500];
for (int charsRead; (charsRead = reader.read(buff)) != -1; ) {
stringBuffer.append(buff, 0, charsRead);
}
}
catch(Exception e){
System.out.print(e);
}
System.out.println(stringBuffer);
正在检查读取的总字节数:
System.out.println(stringBuffer.length()); // 51
文件大小列表:
ls -l .
51 test.txt
字节读取匹配,因此它得到包含空白行的所有行。
注意:我使用Java6,修改以适合您的版本希望这能有所帮助。我想不出使用扫描仪的方法。尝试另一种读取文件的方法。这里有一个好帖子:
ls -l .
51 test.txt