从文件中读取一行的一部分,然后将其删除

时间:2019-09-17 14:21:29

标签: java delete-row

假设我有一行话:“你好杰森,你今天好吗?”在文本文件中。 假设我不知道该行是什么,但是我从中得到了一个字符串,例如“ are”,而“ are”一词仅显示在该行内。 我怎么能找到这个地方+删除整行而又不知道同一行中的其他单词?

我尝试过在网上寻找解决方案,但是只有知道了整条线,我才能找到解决问题的方法。

BufferedReader bufferedReader = new BufferedReader(new 
FileReader("Hello.txt"));
String currentLine;
    while((currentLine = bufferedReader.readLine()) != null){
        if(currentLine.contains("are")){
        //Delete the whole line.
        }
}

预期结果:删除包含单词的行。 错误:无。

1 个答案:

答案 0 :(得分:0)

这是我要做的方式。将要保留的行存储在列表中。然后只需将该列表重写到文件中即可。

// using for loop
private static void option1( final File FILE ) throws IOException {

    // read all lines from file into a list
    List<String> fileContent = new ArrayList<>( Files.readAllLines( FILE.toPath(), StandardCharsets.UTF_8 ) );

    List<String> linesToWrite = new ArrayList<>(); // new list of lines that we want to keep
    for ( String line : fileContent ) {

        if ( !line.contains( "are" ) ) {
            // line doesn't contain are, so add to our list of lines to keep
            linesToWrite.add( line );
        }

    }

    // write the lines we want back to the file
    Files.write( FILE.toPath(), linesToWrite, StandardCharsets.UTF_8 );
}

// using Java 8 Streams
private static void option2( final File FILE ) throws IOException {

    // read all lines from file into a list
    List<String> fileContent = new ArrayList<>( Files.readAllLines( FILE.toPath(), StandardCharsets.UTF_8 ) );

    // filter using streams
    fileContent = fileContent.stream()
            .filter( line -> !line.contains( "are" ) ) // filter out all lines that contain are
            .collect( Collectors.toList() );

    // write the lines we want back to the file
    Files.write( FILE.toPath(), fileContent, StandardCharsets.UTF_8 );
}