删除Java中文本文件中内容之后的所有不需要的行

时间:2015-07-18 18:22:41

标签: java regex

我已经看过如何使用正则表达式模式在读取文件时删除所有空白行,但我想在所有内容之后删除所有不必要的行。例如:

输入

  

asdiofhpaiodf

     

(空行,不删除

     

asdfihap [sdifh

     

asdpiofhaspdif

     

asiodfhpai [sdfh

     

(空行,删除

     

(空行,删除


输出

  

asdiofhpaiodf

     

(空行)

     

asdfihap [sdifh

     

asdpiofhaspdif

     

asiodfhpai [sdfh

2 个答案:

答案 0 :(得分:2)

您可以使用

修剪字符串的结尾
String trimmedContents = origContents.replaceAll("\\s+$", "");

答案 1 :(得分:0)

只是添加到stribizhev的答案,您可能还想使用System.lineSeparator()而不是\s(在大多数情况下\s更有用,但我不知道您的需求)< / p>

由于我发布了一个答案(无法发表评论),我不妨出去。我的印象是你试图重新调整文件的大小。 (我再次使用System.lineSeparator()来展示如何使用它。

    String regex = "[^"+ System.lineSeparator() + "]" + System.lineSeparator() + "$"; //or use "\\S\\s*$";
    Matcher whiteSpace = Pattern.compile(regex).matcher("");
    int threshold = 4; //number of characters to look back at the end of file.
    byte[] readBytes = new byte[threshold]; //for whatever reason we can't just read in a string :/
    try ( RandomAccessFile file = new RandomAccessFile(input_file, "rw")){
        //start at the end of file, look for non line separator character.
        long cursor;
        for(cursor = file.length() - threshold; cursor > 0 ; cursor=cursor-threshold){
            file.seek(cursor);
            file.readFully(readBytes);
            if(whiteSpace.reset(new String(readBytes)).find()){
                cursor = cursor + whiteSpace.start() + 1;
                break;
            }
        }
        file.setLength(cursor);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

不知道性能会是什么样的,但是我没有阅读整个文件,从最后开始。