java同时替换多个字符串

无名草110 2013-04-25 08:52:37
例如,有一个字符串"abcdefg"
现在的要求是把"abc"变成"efg"
把"efg"变成"xyz"
怎么搞?
即目标串为:"efgdxyz"
(PS:replaceAll会导致同步问题,就是说"abc"变成"efg"后,立刻又变成的"xyz")
...全文
5591 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
哭哭吓唬你 2015-09-18
  • 打赏
  • 举报
回复
我的这个也是从别人那看来的,但是找不到出处了,对不住原作者了
哭哭吓唬你 2015-09-18
  • 打赏
  • 举报
回复
public static String replcePlaceHolder(String destString, final Map<String, Object> params, String rule) { if (StringUtils.isBlank(rule)) { rule = "(\\$\\{(" + StringUtils.join(params.keySet(), "|") + ")\\})"; } Pattern pattern = Pattern.compile(rule); Matcher matcher = pattern.matcher(destString); StringBuffer stringBuilder = new StringBuffer(); while (matcher.find()) { matcher.appendReplacement(stringBuilder, String.valueOf(params.get(matcher.group(2)))); } matcher.appendTail(stringBuilder); return stringBuilder.toString(); }
hqx0943 2015-08-31
  • 打赏
  • 举报
回复
用replaceAll
圣人也自卑 2015-02-25
  • 打赏
  • 举报
回复
[code language="java"] static void replace() { Pattern p = Pattern.compile("abc|efg"); Matcher m = p.matcher("abcdefg"); StringBuffer sb = new StringBuffer(); while (m.find()) { if(m.group().equals("abc")) m.appendReplacement(sb, "efg"); else if(m.group().equals("efg")) m.appendReplacement(sb, "xyz"); } m.appendTail(sb); System.out.println(sb.toString()); } [/code]
host_CSND 2014-10-31
  • 打赏
  • 举报
回复
写成一个配置文件,用value去替换key不就可以了么,修改的时候直接修改配置文件即可
shine333 2013-04-26
  • 打赏
  • 举报
回复
建议如果JDK版本较高,可以用replace(String, String),效率更高些
lcf 2013-04-26
  • 打赏
  • 举报
回复
引用 9 楼 groovy2007 的回复:
使用正则表达式逐个替换

    static void replace() {
        Pattern p = Pattern.compile("abc|efg");
        Matcher m = p.matcher("abcdefg");
        StringBuffer sb = new StringBuffer();
        while (m.find()) {
            if(m.group().equals("abc")) m.appendReplacement(sb, "efg");
            else if(m.group().equals("efg")) m.appendReplacement(sb, "xyz");
        }
        m.appendTail(sb);
        System.out.println(sb.toString());
    }
正解+1
groovy2007 2013-04-26
  • 打赏
  • 举报
回复
使用正则表达式逐个替换

    static void replace() {
        Pattern p = Pattern.compile("abc|efg");
        Matcher m = p.matcher("abcdefg");
        StringBuffer sb = new StringBuffer();
        while (m.find()) {
            if(m.group().equals("abc")) m.appendReplacement(sb, "efg");
            else if(m.group().equals("efg")) m.appendReplacement(sb, "xyz");
        }
        m.appendTail(sb);
        System.out.println(sb.toString());
    }
XZkaishi1989 2013-04-26
  • 打赏
  • 举报
回复
String str = "abcdefg";
	        str = str.replace("efg", "xyz").replace("abc", "efg");
	        System.out.println(str);
yongtaimen 2013-04-25
  • 打赏
  • 举报
回复
str.replaceAll("efg", "xyz").replaceAll("abc", "efg")
无名草110 2013-04-25
  • 打赏
  • 举报
回复
引用 3 楼 liusu19 的回复:
Java code?1"abcdefg".replaceAll("efg", "xyz").replaceAll("abc", "efg")
太取巧了
无名草110 2013-04-25
  • 打赏
  • 举报
回复
引用 2 楼 Inhibitory 的回复:
Java code?12345678public class Hello { public static void main(String[] args) { String str = "abcdefg"; str = str.replaceAll("efg", "xyz"); str = str.replaceAll("a……
太取巧了
liusu19 2013-04-25
  • 打赏
  • 举报
回复
"abcdefg".replaceAll("efg", "xyz").replaceAll("abc", "efg")
Inhibitory 2013-04-25
  • 打赏
  • 举报
回复
public class Hello {
    public static void main(String[] args) {
        String str = "abcdefg";
        str = str.replaceAll("efg", "xyz");
        str = str.replaceAll("abc", "efg");
        System.out.println(str);
    }
}
无名草110 2013-04-25
  • 打赏
  • 举报
回复
还有,这个abc只是我举的例子,实际并不知道字符串的长度

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧