有一个字符串,可能是任意的合法字符串。例如:ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa;
当遇到<<>>是就进行替换。例如<<123>>替换成china;<<456>>替换成功japan;<<789>>替换成功American
---------------------------
原字符串ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa;
进替换后变成ja;d110jfa;chinadafadj;lfjapanAmericanadljfa;

解决方案 »

  1.   

    你是否有一个这样的对应规则?
    123 替换成 china 
    456 替换成 japan
    789 替换成 american
    假设出现了234 如何替换?
    假如你有一个替换规则,就是说出现了234会有一个对应的替换字符串?还是只可能出现你说的上述三种替换。
      

  2.   


    public static void main(String[] args) {
    String str = "ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa";
    String[][] objStringArray = new String[3][];
    objStringArray[0] = new String[]{"<<123>>", "china"};
    objStringArray[1] = new String[]{"<<456>>", "japan"};
    objStringArray[2] = new String[]{"<<789>>", "american"};
    for(int i=0; i<objStringArray.length; i++) {
    System.out.println(str);
    str = str.replace(objStringArray[i][0], objStringArray[i][1]);
    }
    System.out.println(str);
    }
    /*
    ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa
    ja;d110jfa;chinadafadj;lf<<456>><<789>>adljfa
    ja;d110jfa;chinadafadj;lfjapan<<789>>adljfa
    ja;d110jfa;chinadafadj;lfjapanamericanadljfa
    */
      

  3.   

    如果出现234,就替换成空例如
    ja;d<<234>>110jfa;chinadafadj
    更好后为
    ja;d110jfa;chinadafadj
      

  4.   

    规则:
    <<>>提供对应值的,就替换成相应的值;如果不提供,就替换成空
      

  5.   


    String s="ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa;";
    Map<String, String> replaceMap=new HashMap<String, String>(){{ //你的规则
    put("123", "china");
    put("456", "japan");
    put("789", "american");;
    }};
    Matcher m=Pattern.compile("(?is)<<(.+?)>>").matcher(s);
    while (m.find()) {
    if(replaceMap.containsKey(m.group(1))){
    s=s.replace(m.group(), replaceMap.get(m.group(1)));
    } else {
    s=s.replace(m.group(), "");
    }
    }
    System.out.println(s);
      

  6.   


    String str = "ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa";
    str.replace("<<>>", "");
    str.replace("<<123>>", "china");
    str.replace("<<456>>", "japan");
    str.replace("<<789>>", "american");
      

  7.   

    如果匹配规则很多,有没有好的方法?
    123 替换成 china  
    456 替换成 japan
    789 替换成 american
    。。
      

  8.   

    如果匹配规则多了 ,就按10的写法,把匹配规则都写到Map里,循环匹配替换
      

  9.   

    如果匹配规则多了 ,就按10楼的写法,把匹配规则都写到Map里,循环匹配替换
      

  10.   

    对应规则
    123 替换成 china  
    456 替换成 japan
    789 替换成 american
    321 替换成 china  
    654 替换成 japan
    987 替换成 american原字符串ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa;
    进替换后变成ja;d110jfa;chinadafadj;lfjapanAmericanadljfa;
    其实很多规则都没有用到,怎么简化?
      

  11.   

    10楼的写法已经实现你说的了,他先获得<<<>>>里的内容,然后根据这个获得的内容到Map里去找对应的匹配
    然后替换,他并没有全部的去匹配,而是指匹配检测到的
      

  12.   

    有没有办法先找到<<>>的值,有了再替换;没有就不替换了
      

  13.   

    规则用了map。
    String s="ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa;";
    //map存储替换规则
            Map<String, String> params=new HashMap<String, String>(); 
            params.put("<<123>>", "china");
            params.put("<<456>>", "japan"); 
            params.put("<<781>>", "american");
            
            for (Iterator<String> iter = params.keySet().iterator(); iter.hasNext();) {
               String key = iter.next();
               s = s.replace(key, params.get(key));
             }        System.out.println(s);
      

  14.   

    这不是可以搞成基于表驱动的string match问题么
      

  15.   

    10楼的方案
    up
    up
    up
    up
    up
    up
      

  16.   

    楼主可以写一个配置文件
    然后对应的map,找到要替换的内容
    这样的话可以想替换多少就替换多少
    然后可以replace就OK了
      

  17.   

    看我的,配置文件放到src下面,名字叫text.propertieschina=<<123>>
    japan=<<456>>
    american=<<789>>
    java代码如下String text = "ja;d110jfa;<<123>>dafadj;lf<<456>><<789>>adljfa;";
    Properties prop = new Properties();
    FileInputStream fis = new FileInputStream("src/text.properties");   
    prop.load(fis);
    Enumeration<Object> e =  prop.keys();
    while(e.hasMoreElements()) {
    String str = (String)e.nextElement();
    text = text.replaceAll(prop.getProperty(str), str);
    }

    System.out.println(text);
    结果如下
    ja;d110jfa;chinadafadj;lfjapanamericanadljfa;