我的输入文件有很多记录和样本,让我们说它有(这里的行号仅供您参考)
1. end
2. endline
3. endofstory
我希望我的输出为:
1.
2. endline
3. endofstory
但是当我使用这段代码时:
import java.io.*;
public class DeleteTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
File file = new File("D:/mypath/file.txt");
File temp = File.createTempFile("file1", ".txt", file.getParentFile());
String charset = "UTF-8";
String delete = "end";
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), charset));
PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(temp), charset));
for (String line; (line = reader.readLine()) != null;) {
line = line.replace(delete, "");
writer.println(line);
}
reader.close();
writer.close();
}
catch (Exception e) {
System.out.println("Something went Wrong");
}
}
}
我得到的输出为:
1.
2. line
3. ofstory
你能帮我解决一下我期望的产出吗?
答案 0 :(得分:1)
首先,您需要使用新字符串List item
替换该行而不是空字符串。您可以使用line = line.replace(delete, "List item");
执行此操作,但由于您只想将end
替换为行中唯一的字符串,您必须使用以下内容:
line = line.replaceAll("^"+delete+"$", "List item");
根据您的编辑,您似乎确实要用空字符串替换包含end
的行。你可以用这样的东西做到这一点:
line = line.replaceAll("^"+delete+"$", "");
此处,replaceAll
的第一个参数是正则表达式,^
表示字符串的开头,$
表示结束。只有在该行上唯一的内容时,才会替换end
。
您还可以检查当前行是否是您要删除的行,只需在文件中写一个空行。
例如:
if(line.equals(delete)){
writer.println();
}else{
writer.println(line);
}
要为多个字符串执行此过程,您可以使用以下内容:
Set<String> toDelete = new HashSet<>();
toDelete.add("end");
toDelete.add("something");
toDelete.add("another thing");
if(toDelete.contains(line)){
writer.println();
}else{
writer.println(line);
}
这里我使用了一组我要删除的字符串,然后检查当前行是否是其中一个字符串。