有一个文件结构为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仍在那里?
答案 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();
}
}