日期:2014-05-20  浏览次数:20826 次

java读取文本和参数列表,用参数列表给的值替换里面字符串
读入几段文本,和一个参数列表,把文本中出现的所有参数都替换成参数列表中的参数值后返回。文本中的参数以$$括起。需考虑文本和参数列表都很大的情况。
例如:
文本一
$Name1$ is a good person. He has three sons: $Name6$, $Name3$ and $Name5$. $Name3$ is an engineer.

参数列表
Name1 Tom
Name2 Peter
Name3 Simon
Name4 John
Name5 Jerry
Name6 Harry
...

返回:
Tom is a good person. He has three sons: Harry, Simon and Jerry. Simon is an engineer.

------解决方案--------------------
public class CSDNTest2 {
private HashMap<String, String> map = new HashMap<String, String>();
public CSDNTest2(){
map.put("Name1"," Tom");
map.put("Name2"," Peter");
map.put("Name3"," Simon");
map.put("Name4"," John");
map.put("Name5"," Jerry");
map.put("Name6"," Harry");

}
public String replace(String oldString){
ArrayList<String> list= new ArrayList<String>();
String[] sorts = oldString.split("#");
String returnString ="";
//sorts.length必为奇数至少是1
for(int i=0;i<sorts.length;i++){
System.out.println(sorts[i]);
//所有奇数项即为所需参数(自己可以验证出来)
if (i%2!=0) {
String newString = "";
newString = map.get(sorts[i]);
sorts[i] = newString;
}
returnString =returnString+""+sorts[i];
}
return returnString.substring(1);
}
public static void main(String[] args) {
CSDNTest2 csdnTest2 = new CSDNTest2();
String oldString = "#Name1# is a good person. He has three sons: " +
"#Name6#, #Name3# and #Name5#. #Name3# is an engineer.";
System.out.println(csdnTest2.replace(oldString));
}
}



//这是我能想出的最直接的方法了,望采纳
------解决方案--------------------
从文本提取一样的,读文本信息保存到Map难道不会做吗?
首先把参数文本信息保存到Map
然后一行一行遍历要替换的文件,遍历一行就替换一次,然后把替换后的结果保存到另一个文件
for example
Java code
//保存参数到Map
Map<String, String> params = new HashMap<String, String>();
Scanner sc = new Scanner(new FileInputStream("参数文本文件"));
while (sc.hashNext()) {
    String[] sa = sc.nextLine().split("\\s+");
    if (sa.length==2) params.put(sa[0], sa[1]);
}
sc.close();

//替换文本并保存结果
sc = new Scanner(new FileInputStream("替换文本文件"));
PrintStream ps = new PrintStream(new FileOutputStream("结果文本文件"));
Pattern p = Pattern.compile("[$]([^$]*?)[$]");
while (sc.hashNext()) {
    Matcher m = p.matcher(sc.nextLine());
    StringBuffer buf = new StringBuffer();
    while (m.find()) { //查找并替换参数
        m.appendReplacement(buf, params.get(m.group(1)));
    }
    buf.appendTail();

    ps.println(buf); //替换结果写入结果文件
}
sc.close();
ps.close();