这两个文件内容如下:
context.txt
“并不是每个人都需要$(qunar)自己的粮食,$(flight.1)每个人都需要做自己穿的$(flight.2),我们说着别人发明的$(hotel),使用别人发明的数学......我们一直在$(tuan)别人的成果。使用人类的已有经验和知识$(travel.1)来进行,是一件$(travel.2)的事情”
word.conf
flight=也不是:衣服
qunar=种植
hotel=语言
tuan=使用
travel=发明创造:很了不起
word.conf
flight=也不是:衣服
qunar=种植
hotel=语言
tuan=使用
travel=发明创造:很了不起
public class MergeText {
public static void main(String[] args) {
String a="并不是每个人都需要$(qunar)自己的粮食,$(flight.1)每个人都需要做自己穿的$(flight.2),"
+"我们说着别人发明的$(hotel),使用别人发明的数学......我们一直在$(tuan)别人的成果。"
+"使用人类的已有经验和知识来进行$(travel.1),是一件$(travel.2)的事情。";
System.out.println(f(a));
}
public static String f(String s){
StringBuffer sb=new StringBuffer();
StringBuffer sb2=new StringBuffer();
int j=0;
Map map=new HashMap();
map.put("flight.1", "也不是");
map.put("flight.2", "衣服");
map.put("qunar", "种植");
map.put("hotel", "语言");
map.put("tuan", "使用");
map.put("travel.1", "发明创造");
map.put("travel.2", "很了不起");
for(int i=0;i<s.length();i++){
if(s.charAt(i)!='$'){
sb.append(s.charAt(i));
}else{
for(j=i;;j++){
sb2.append(s.charAt(j));
if(s.charAt(j)==')'){
break;
}
}
String a=new String(sb2);
String a2=a.substring(2,a.length()-1);
sb.append((map.get(a2)).toString());
sb2.delete(0, sb2.length());
i=j;
}
}
return new String(sb);
}
}
package qunar;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
public class Merge2File {
public static void main(String args[]){
File context=new File("C:/Users/mao/nowCode/context.txt");
File word=new File("C:/Users/mao/nowCode/word.conf");
HashMap<String,String> wordsMap=new HashMap<String, String>();
try {
//word.conf以GBK方式编码
BufferedReader wordReader=new BufferedReader((new InputStreamReader(new FileInputStream(word), "GBK")));
String temp=new String(wordReader.readLine().getBytes(),"UTF-8");
/***word.conf文件以UTF-8方式编码
BufferedReader wordReader=new BufferedReader(new FileReader(word));
String temp=wordReader.readLine();
wordReader.read();
//UTF-8编码格式的文件有一个文件头EF BB BF(65279),需要去掉
********/
while(temp!=null){
String key=temp.split("=")[0];
String[] values=temp.split("=")[1].split(":");
if(values.length==1){
wordsMap.put(key, values[0]);
temp=wordReader.readLine();
}
else{
for(int i=0;i<values.length;i++){
wordsMap.put(key+"."+(i+1), values[i]);
}
temp=wordReader.readLine();
}
}
BufferedReader reader=new BufferedReader(new FileReader(context));
char[] buf=new char[(int) context.length()];
reader.read(buf);
StringBuffer contextString=new StringBuffer(new String(buf));
int start=contextString.indexOf("$(", 0);
while(start>0){
int end=contextString.indexOf(")", start);
String target=new String(contextString.substring(start+2, end));
String value= wordsMap.get(target);
contextString=contextString.replace(start, end+1, value);
start=contextString.indexOf("$(", end);
}
System.out.println(contextString);
} catch (IOException e) {
e.printStackTrace();
}
}
}