不就是将"美国"替换成"中国"吗?replaceAll()

解决方案 »

  1.   

    当然不行了,前面后面要限制条件的
    比如"他是美国人"就不能替换为"他是中国人",因为"美国"的前面没有"abc",后面没有"def"
    (*号的字符串长度在0-100之间)
      

  2.   

    写一个简单的算法就行,不能够光光只用系统提供的方法
    ===============
    先找到字符串里是否有abc
    如果没有,结束。
    如果有,查找后面若干字符后面是不是有“美国def”
        如果没有,结束
        如果有,替换为“中国def”详细的,就不写了,大概就是这个意思
      

  3.   

    import java.util.regex.Pattern;
    import java.util.regex.Matcher;public class Replace02 {
        public static void main(String[] args) {
            StringBuffer original = new StringBuffer("abc12美国34美国56美国7890美国def");        String keyWord = "美国";
            String replacement = "中国";
            StringBuffer result = new StringBuffer();        Pattern p1 = Pattern.compile("(abc.*)" + keyWord + "(def)");
            Matcher m1 = p1.matcher(original);        while (m1.find()) {
                m1.appendReplacement(result, "$1" + replacement + "$2");
            }
            m1.appendTail(result);        System.out.println("original: \"" + original + "\"");
            System.out.println("result: \"" + result + "\"");
        }
    }如此即可
      

  4.   

    import java.util.regex.Pattern;
    import java.util.regex.Matcher;
    如上所说,这两个类可以解决.历害,我没有想到
      

  5.   

    "registered(已注册)"的办法确实可行
    不过还有一个小问题,那就是只能替换original中的最后一个"美国"
    输出结果为"abc12美国34美国56美国7890中国def"或
    StringBuffer original = new StringBuffer("abc12美国34美国56美国7890美国def");
    original.append("abc88888美国322美国233美国ohoh美国def");

    输出结果为:"abc12美国34美国56美国7890美国defabc88888美国322美国233美国ohoh中国def"
    而我要的结果是:"abc12中国34中国56中国7890中国defabc88888中国322中国233中国ohoh中国def"
    要怎么修改呢
      

  6.   

    开始本以为你只想要替换最后一个
    如果要全替换的话要用到双Patternimport java.util.regex.Pattern;
    import java.util.regex.Matcher;public class Replace02 {
        public static void main(String[] args) {
            StringBuffer original =
                    new StringBuffer("987654321abc12美国34美国def56美国7890美国def123456");
            original.append("abc88888美国322美国233美国ohoh美国def");        String blank = "";
            String keyWord = "美国";
            String replacement = "中国";
            StringBuffer result = new StringBuffer();        Pattern p1 = Pattern.compile("abc.*?" + keyWord + "def");
            Matcher m1 = p1.matcher(original);
            Pattern p2 = Pattern.compile(keyWord);
            Matcher m2 = p2.matcher(blank);        while (m1.find()) {
                m1.appendReplacement(result, blank);
                m2.reset(m1.group());
                while (m2.find()) {
                    m2.appendReplacement(result, replacement);
                }
                m2.appendTail(result);
            }
            m1.appendTail(result);        System.out.println("original: \"" + original + "\"");
            System.out.println("result: \"" + result + "\"");
        }
    }运行结果为:
    original: "987654321abc12美国34美国def56美国7890美国def123456abc88888美国322美国233美国ohoh美国def"
    result: "987654321abc12中国34中国def56美国7890美国def123456abc88888中国322中国233中国ohoh中国def"注意: original 里面头一个匹配是 "abc12美国34美国def",
    而紧随其后的 "56美国7890美国def" 由于没有前缀 "abc" 所以被忽略掉了
    如果你想得到结果 "987654321abc12中国34中国def56中国7890中国def123456abc88888中国322中国233中国ohoh中国def"
    只需要将 Pattern p1 = Pattern.compile("abc.*?" + keyWord + "def");
    里面的 "?" 删除就可以了
      

  7.   

    美丽的
    Regular Expression 
    :-)
      

  8.   

    谢谢 registered(已注册)的帮助