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

解决方案 »

  1.   

    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){
         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
    符合要求了吧
      

  2.   

    汗可能我没说清楚啊。
    String str = "filed1:=value1{$}filed2:=value2{$}filed3:=value3" ;filed1可以使任何内容,value1也可以是任何内容格式都是字段X:=数值X{$}字段X:=数值X{$}字段X:=数值X
      

  3.   

    这样总行了吧
    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 
      

  4.   

    这种需求其实没必要用正则的,不过如果不要求那么多的话,用正则也无不可public static String repFiled(String src, String filed, String value) { 
        String pattern = Pattern.quote(filed) + ":=[^={]*(?=\\{\\$}|\\s*$)"; 
        return src.replaceAll(pattern, filed + ":=" + value);
      

  5.   

    除filed外,要替换的模式是固定的,动态生成一下就可以了
    Pattern.quote(filed)是为了处理传进去的filed存在正则中的元字符时,需要进行转义处理,否则会抛异常
    String pattern = Pattern.quote(filed) + ":=[^={]*(?=\\{\\$}|\\s*$)"; 替换后的内容也是固定的,就是传进去的filed和value
    src.replaceAll(pattern, filed + ":=" + value);
      

  6.   

    简单写了一个类,仅供楼主参考。
    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);
    }
    }