且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何删除Java文件中以特定字符串开头和结尾的特定行?

更新时间:2023-01-22 19:33:48

一种幼稚的方法:

A naive approach:

package test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class ReadStringFromFileLineByLine {

    public static void main(String[] args) {
        try {
            File file = new File("abc.txt");
            FileReader fileReader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            StringBuffer stringBuffer = new StringBuffer();
            String line;
            boolean flag = true;
            while ((line = bufferedReader.readLine()) != null) {
                if(line.contains("abs_mod_")){
                    if(flag)    flag = false;
                    else        flag = true;
                }else if(flag){
                    stringBuffer.append(line);
                    stringBuffer.append("\n");
                }
            }
            fileReader.close();
            System.out.println("Contents of file:");
            System.out.println(stringBuffer.toString().replace("\n\n\n", "\n\n"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

使用正则表达式:

Using regex:

package test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class ReadStringFromFileLineByLine {

    public static void main(String[] args) {
        try {
            File file = new File("abc.txt");
            FileReader fileReader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            StringBuffer stringBuffer = new StringBuffer();
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                stringBuffer.append(line);
                stringBuffer.append("\n");
            }
            fileReader.close();
            System.out.println("Contents of file:");
            System.out.println(
                stringBuffer
                .toString()
                .trim()
                .replaceAll("[\\n]+(abs_mod_)(\\s|\\S)*(abs_mod_)", "")
            );
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}