如何删除项目包含子字符串,但不包含另一个子字符串

时间:2017-06-30 11:35:31

标签: java

有一个文件结构为Book_position1_positon2_position3:

Book_unknow_unknow_unknow

Book_unknow_1_2

Book_unknow_unknow_2

Book_unknow_1_unknow

Book_EU_1_2

我想删除位置2和位置3至少有一个未知的所有项目,但保留位置1处未知的项目。

因此过滤结果应为:

Book_unknow_1_2

Book_EU_1_2

我的代码是:

    private void fileCopyUsingFileStreams() throws IOException {
        File fileToCopy = new File("/tmp/test.txt");
        FileInputStream input = new FileInputStream(fileToCopy);

        File newFile = new File("/tmp/test_and_once_again.txt");
        FileOutputStream output = new FileOutputStream(newFile);

        byte[] buf = new byte[1024];
        int bytesRead;

        while ((bytesRead = input.read(buf)) > 0) {
            output.write(buf, 0, bytesRead);
        }

        input.close();
        output.close();
    }

不幸的是,此代码将删除所有未知的'项目,如何保持Book_unknow_1_2仍在那里?

2 个答案:

答案 0 :(得分:0)

您应该利用String.split()方法仅在特定位置检查值。例如(代码未经测试):

public boolean shouldRemove(String s) {
    String[] parts = s.split("_");
    if (parts.length > 2 && parts[2].equals("unknown")) {
        return false;
    }
    if (parts.length > 3 && parts[3].equals("unknown")) {
        return false;
    }
    return true;
}

答案 1 :(得分:0)

尝试这样的事情:

Iterator<Map.Entry<String, Book>> iter = books.entrySet().iterator();
while (iter.hasNext())
{
    Map.Entry<String, Book> entry = iter.next();
    if ( entry.getKey().matches("(.+_){2,}unknown.*") )
    {
        iter.remove();
    }
}