如何在Java中使用HashMap一次替换文件中的多个字符串

如何在Java中使用HashMap一次替换文件中的多个字符串,java,string,replace,hashmap,Java,String,Replace,Hashmap,我试图用HashMap替换一个方法中的几个字符串,但目前我只能让它和Map中的第一个字符串一起工作 以前我对每个字符串都使用“replaceAll”方法,这很难维护,因为我试图替换一个不断变化的字符串列表 你能给我一些想法吗 这是我的密码: private static void string_change(String args[]) { try { File file = new File("input_file.txt"); BufferedReader reader = new

我试图用HashMap替换一个方法中的几个字符串,但目前我只能让它和Map中的第一个字符串一起工作

以前我对每个字符串都使用“replaceAll”方法,这很难维护,因为我试图替换一个不断变化的字符串列表

你能给我一些想法吗

这是我的密码:

private static void string_change(String args[])
 {
 try
 {
 File file = new File("input_file.txt");
 BufferedReader reader = new BufferedReader(new FileReader(file));
 String line = "", oldtext = "";
 while((line = reader.readLine()) != null)
     {
     oldtext += line + "\r\n";
 }
 reader.close();

 Map<String, String> ReplacementMap = new HashMap<String, String>();
 ReplacementMap.put("STRING1", "TEXT1");
 ReplacementMap.put("STRING2", "TEXT2");
 ReplacementMap.put("STRING3", "TEXT3");

 String originalString = oldtext;

 for (Map.Entry<String, String> entry : ReplacementMap.entrySet()) {
   StringBuilder builder =  new StringBuilder(originalString.replaceAll(entry.getKey(), entry.getValue()));

   String newtext = builder.toString();

 FileWriter writer = new FileWriter("output_file.txt");
 writer.write(newtext);
 writer.close();
 }

 }
 catch (IOException ioe)
 {
 ioe.printStackTrace();
 }
} 
私有静态无效字符串\u更改(字符串参数[])
{
尝试
{
File File=新文件(“input_File.txt”);
BufferedReader reader=新的BufferedReader(新文件读取器(文件));
字符串行=”,oldtext=”;
而((line=reader.readLine())!=null)
{
oldtext+=行+“\r\n”;
}
reader.close();
Map ReplacementMap=newhashmap();
ReplacementMap.put(“STRING1”、“TEXT1”);
ReplacementMap.put(“STRING2”、“TEXT2”);
ReplacementMap.put(“STRING3”、“TEXT3”);
字符串originalString=oldtext;
对于(Map.Entry:ReplacementMap.entrySet()){
StringBuilder=new StringBuilder(originalString.replaceAll(entry.getKey(),entry.getValue());
字符串newtext=builder.toString();
FileWriter=newfilewriter(“output_file.txt”);
writer.write(新文本);
writer.close();
}
}
捕获(ioe异常ioe)
{
ioe.printStackTrace();
}
} 

问题是,您试图为地图中的每个条目编写文件。因此,只有最后一个条目应用于目标文件。 更好的解决方案是在编写文件之前应用所有替换

File file = new File("input_file.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
StringBuffer buffer = new StringBuffer();
String line;
while((line = reader.readLine()) != null) {
    buffer.append(line);
    buffer.append("\r\n");
}
reader.close();

Map<String, String> replacementMap = new HashMap<String, String>();
replacementMap.put("STRING1", "TEXT1");
replacementMap.put("STRING2", "TEXT2");
replacementMap.put("STRING3", "TEXT3");

String toWrite = buffer.toString();
for (Map.Entry<String, String> entry : replacementMap.entrySet()) {
    toWrite = toWrite.replaceAll(entry.getKey(), entry.getValue()));
}

FileWriter writer = new FileWriter("output_file.txt");
writer.write(toWrite);
writer.close();
File File=new文件(“input_File.txt”);
BufferedReader reader=新的BufferedReader(新文件读取器(文件));
StringBuffer=新的StringBuffer();
弦线;
而((line=reader.readLine())!=null){
buffer.append(行);
buffer.append(“\r\n”);
}
reader.close();
Map replacementMap=newhashmap();
replacementMap.put(“STRING1”、“TEXT1”);
replacementMap.put(“STRING2”、“TEXT2”);
replacementMap.put(“STRING3”、“TEXT3”);
字符串toWrite=buffer.toString();
对于(Map.Entry:replacementMap.entrySet()){
toWrite=toWrite.replaceAll(entry.getKey(),entry.getValue());
}
FileWriter=newfilewriter(“output_file.txt”);
写作(toWrite);
writer.close();

问题是,您试图为地图中的每个条目编写文件。因此,只有最后一个条目应用于目标文件。 更好的解决方案是在编写文件之前应用所有替换

File file = new File("input_file.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
StringBuffer buffer = new StringBuffer();
String line;
while((line = reader.readLine()) != null) {
    buffer.append(line);
    buffer.append("\r\n");
}
reader.close();

Map<String, String> replacementMap = new HashMap<String, String>();
replacementMap.put("STRING1", "TEXT1");
replacementMap.put("STRING2", "TEXT2");
replacementMap.put("STRING3", "TEXT3");

String toWrite = buffer.toString();
for (Map.Entry<String, String> entry : replacementMap.entrySet()) {
    toWrite = toWrite.replaceAll(entry.getKey(), entry.getValue()));
}

FileWriter writer = new FileWriter("output_file.txt");
writer.write(toWrite);
writer.close();
File File=new文件(“input_File.txt”);
BufferedReader reader=新的BufferedReader(新文件读取器(文件));
StringBuffer=新的StringBuffer();
弦线;
而((line=reader.readLine())!=null){
buffer.append(行);
buffer.append(“\r\n”);
}
reader.close();
Map replacementMap=newhashmap();
replacementMap.put(“STRING1”、“TEXT1”);
replacementMap.put(“STRING2”、“TEXT2”);
replacementMap.put(“STRING3”、“TEXT3”);
字符串toWrite=buffer.toString();
对于(Map.Entry:replacementMap.entrySet()){
toWrite=toWrite.replaceAll(entry.getKey(),entry.getValue());
}
FileWriter=newfilewriter(“output_file.txt”);
写作(toWrite);
writer.close();

每次通过循环时都会覆盖输出文件。这个怎么样

String temp = originalString;
for (Map.Entry<String, String> entry : ReplacementMap.entrySet()) {
    temp = temp.replaceAll(entry.getKey(), entry.getValue()));
}
FileWriter writer = new FileWriter("output_file.txt");
writer.append(temp);
writer.close();
String temp=originalString;
对于(Map.Entry:ReplacementMap.entrySet()){
temp=temp.replaceAll(entry.getKey(),entry.getValue());
}
FileWriter=newfilewriter(“output_file.txt”);
writer.append(临时);
writer.close();

每次通过循环时都会覆盖输出文件。这个怎么样

String temp = originalString;
for (Map.Entry<String, String> entry : ReplacementMap.entrySet()) {
    temp = temp.replaceAll(entry.getKey(), entry.getValue()));
}
FileWriter writer = new FileWriter("output_file.txt");
writer.append(temp);
writer.close();
String temp=originalString;
对于(Map.Entry:ReplacementMap.entrySet()){
temp=temp.replaceAll(entry.getKey(),entry.getValue());
}
FileWriter=newfilewriter(“output_file.txt”);
writer.append(临时);
writer.close();

所以它只将“STRING1”替换为“TEXT1”,而不是“STRING2”和“STRING3”?所以它只将“STRING1”替换为“TEXT1”,而不是“STRING2”和“STRING3”?嘿,谢谢!它工作得很好!您认为这段代码在大文件上的性能比我以前使用的逐字符串方法更好吗?是的,这会提高性能。使用循环时,编译器不能自动用StringBuilder替换字符串连接。在您真正需要值本身之前添加大量字符串时,StringBuilder的性能会更好。嘿,谢谢!它工作得很好!您认为这段代码在大文件上的性能比我以前使用的逐字符串方法更好吗?是的,这会提高性能。使用循环时,编译器不能自动用StringBuilder替换字符串连接。在您真正需要值本身之前添加大量字符串时,StringBuilder的性能会更好。感谢您的帮助!我已尝试使用您的代码,但由于某些原因,输出文件为空。我会尝试调整一下,看看是否能得到想要的输出。谢谢你的帮助!我已尝试使用您的代码,但由于某些原因,输出文件为空。我将尝试对它进行一些调整,看看是否可以获得所需的输出。