我正在使用编程类,我们必须使用Huffman树压缩文件并解压缩。
我遇到了一个问题,我无法捕获txt文件的最后一个换行符。 例如。
This is a line
This is a secondline
//empty line
因此,如果我压缩并解压缩文件中的上述文本,我最终会得到一个带有此文件的文件
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()之后,两者仍然会导致类似的问题。
那么有办法解决这个问题吗? 提前谢谢。
答案 0 :(得分:0)
不要完全改变您的代码或方法,使用StringBuilder似乎运作良好。
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
字节读取匹配,所以看起来它包含所有行,包括空白行。
注意:我使用Java 6,修改以适合您的版本。
希望这有帮助。