如果最后一行为空,则扫描仪无法捕获上一个换行符

时间:2017-03-16 18:59:09

标签: java

我正在使用编程类,我们必须使用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()之后,两者仍然会导致类似的问题。

那么有办法解决这个问题吗? 提前谢谢。

1 个答案:

答案 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,修改以适合您的版本。

希望这有帮助。