首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何替换两个字符串,使其中一个字符串最终不会替换另一个字符串?

如何替换两个字符串,使其中一个字符串最终不会替换另一个字符串?
EN

Stack Overflow用户
提问于 2014-11-07 07:33:46
回答 14查看 18.5K关注 0票数 163

假设我有以下代码:

代码语言:javascript
复制
String word1 = "bar";
String word2 = "foo";
String story = "Once upon a time, there was a foo and a bar."
story = story.replace("foo", word1);
story = story.replace("bar", word2);

运行此代码后,story的值将为"Once upon a time, there was a foo and a foo."

如果我以相反的顺序替换它们,也会出现类似的问题:

代码语言:javascript
复制
String word1 = "bar";
String word2 = "foo";
String story = "Once upon a time, there was a foo and a bar."
story = story.replace("bar", word2);
story = story.replace("foo", word1);

story的值将为"Once upon a time, there was a bar and a bar."

我的目标是把story变成"Once upon a time, there was a bar and a foo.",我该怎么做呢?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2014-11-07 07:58:42

使用Apache Commons StringUtils中的replaceEach()方法

代码语言:javascript
复制
StringUtils.replaceEach(story, new String[]{"foo", "bar"}, new String[]{"bar", "foo"})
票数 89
EN

Stack Overflow用户

发布于 2014-11-10 10:45:16

这里有一个使用Map的不太复杂的答案。

代码语言:javascript
复制
private static String replaceEach(String str,Map<String, String> map) {

         Object[] keys = map.keySet().toArray();
         for(int x = 0 ; x < keys.length ; x ++ ) {
             str = str.replace((String) keys[x],"%"+x);
         }

         for(int x = 0 ; x < keys.length ; x ++) {
             str = str.replace("%"+x,map.get(keys[x]));
         }
         return str;
     }

方法被调用

代码语言:javascript
复制
Map<String, String> replaceStr = new HashMap<>();
replaceStr.put("Raffy","awesome");
replaceStr.put("awesome","Raffy");
String replaced = replaceEach("Raffy is awesome, awesome awesome is Raffy Raffy", replaceStr);

输出结果是: Raffy很棒,Raffy Raffy很棒

票数 5
EN

Stack Overflow用户

发布于 2014-11-07 08:39:23

如果您希望能够处理要替换的多个搜索字符串,可以很容易地通过在每个搜索项上拆分字符串,然后替换它来实现。下面是一个示例:

代码语言:javascript
复制
String regex = word1 + "|" + word2;
String[] values = Pattern.compile(regex).split(story);

String result;
foreach subStr in values
{
   subStr = subStr.replace(word1, word2);
   subStr = subStr.replace(word2, word1);
   result += subStr;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26791441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档