String str = "filed1:=value1{$}filed2:=value2{$}filed3:=value3"
格式都是这样的,但也可能更长,比如可能是:
filed1:=value1{$}filed2:=value2{$}filed3:=value3{$}filed4:=value4............
也可能短,比如可能是:
filed1:=value1{$}filed2:=value2我会传一个filedX,一个value,希望能按照我传的filedX,和value,替换本来字符串中对应的value;比如字符串是:
filed1:=value1{$}filed2:=value2我传:
filed1,valueTest就返回字符串
filed1:=valueTest{$}filed2:=value2
格式都是这样的,但也可能更长,比如可能是:
filed1:=value1{$}filed2:=value2{$}filed3:=value3{$}filed4:=value4............
也可能短,比如可能是:
filed1:=value1{$}filed2:=value2我会传一个filedX,一个value,希望能按照我传的filedX,和value,替换本来字符串中对应的value;比如字符串是:
filed1:=value1{$}filed2:=value2我传:
filed1,valueTest就返回字符串
filed1:=valueTest{$}filed2:=value2
public static void main(String[] args) throws Exception {
String str = "filed1:=value1{$}filed2:=value2{$}filed3:=value3" ;
System.out.println(f(str,"filed1","valuetest"));
System.out.println(f(str,"filed2","valuetest2"));
System.out.println(f(str,"filed3","valuetest3"));
}
public static String f(String s,String f,String v){
return s.replace("value"+f.substring(5), v);
}
}输出:
---------------------------
filed1:=valuetest{$}filed2:=value2{$}filed3:=value3
filed1:=value1{$}filed2:=valuetest2{$}filed3:=value3
filed1:=value1{$}filed2:=value2{$}filed3:=valuetest3
符合要求了吧
String str = "filed1:=value1{$}filed2:=value2{$}filed3:=value3" ;filed1可以使任何内容,value1也可以是任何内容格式都是字段X:=数值X{$}字段X:=数值X{$}字段X:=数值X
public class Main {
public static void main(String[] args) throws Exception {
String str = "filed1:=value1{$}filed2:=value2{$}filed3:=value3" ;
System.out.println(f(str,"filed1","valuetest"));
System.out.println(f(str,"filed2","valuetest2"));
System.out.println(f(str,"filed3","valuetest3"));
}
public static String f(String s,String f,String v){
String ss=s+"{$}";
String reg=f+":=.*?\\{\\$\\}";
String replace=f+":="+v+"\\{\\$\\}";
ss=ss.replaceAll(reg,replace);
return ss.substring(0,ss.length()-3);
}
}输出:
---------------------------
filed1:=valuetest{$}filed2:=value2{$}filed3:=value3
filed1:=value1{$}filed2:=valuetest2{$}filed3:=value3
filed1:=value1{$}filed2:=value2{$}filed3:=valuetest3
String pattern = Pattern.quote(filed) + ":=[^={]*(?=\\{\\$}|\\s*$)";
return src.replaceAll(pattern, filed + ":=" + value);
}
Pattern.quote(filed)是为了处理传进去的filed存在正则中的元字符时,需要进行转义处理,否则会抛异常
String pattern = Pattern.quote(filed) + ":=[^={]*(?=\\{\\$}|\\s*$)"; 替换后的内容也是固定的,就是传进去的filed和value
src.replaceAll(pattern, filed + ":=" + value);
public class Parameters {
public static final String DefaultPropertySeparator = "{$}";
public static final String DefaultSeparator = ":=";
private HashMap<String,String> property = new LinkedHashMap<String,String>();
private String propertySeparator;
private String separator;
public Parameters(String sentence){
this(sentence,DefaultPropertySeparator,DefaultSeparator);
}
public Parameters(String sentence,String propertySeparator,String separator){
this.propertySeparator = propertySeparator;
this.separator = separator;
String propertySeparatorRegex = createRegex(propertySeparator);
String separatorRegex =createRegex(separator);
String props [] = sentence.split(propertySeparatorRegex);
for(String prop : props){
String sub [] = prop.split(separatorRegex);
property.put(sub[0], sub[1]);
}
} private String createRegex(String str) {
StringBuilder sb = new StringBuilder(str.length()*2);
for(char ch : str.toCharArray()){
sb.append('\\').append(ch);
}
return sb.toString();
}
public void setParameter(String key,String value){
property.put(key, value);
}
public String getValue(String key){
return property.get(key);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
int count =0;
for(Map.Entry<String, String> e : property.entrySet()){
if(count++>0)sb.append(propertySeparator);
sb.append(e.getKey()).append(separator).append(e.getValue());
}
return sb.toString();
}
/**
* 测试用例应该删除
*/
public static void main(String args []){
Parameters p = new Parameters("filed1:=value1{$}filed2:=value2{$}filed3:=value3");
p.setParameter("filed1", "valueTest");
System.out.println(p);
}
}