如果我有这个字符串“狗狗狗”我想把它变成像“猫鸟龟”的东西。
如果我运行这样的代码:
Pattern p = Pattern.compile("dog");
Matcher m = p.matcher("dog dog dog");
while(m.find())
{
System.out.println("group:"+m.group());
}
我得到这样的东西:
狗
狗
狗
但有没有办法在每只狗用一个不同的单词找到我上面提到的所需输出时基本上覆盖它们?即dog1 - > cat,dog2 - > bird,dog3 - > turtle
答案 0 :(得分:0)
是的,你可以很容易地做到这一点。
请注意,此代码不考虑所有方案,如果语句中有多于3只狗,则可能需要重置int变量的计数器。 除了正则表达式很有趣之外,您还可以找到更多信息here。
String haystack =“狗狗狗”;
模式p = Pattern.compile(“狗”);
String [] animals = {“cat”,“bird”,“turtle”};
private void findAndReplaceDog() {
Matcher matcher = p.matcher(haystack); int i=0; while(matcher.find()){ haystack = matcher.replaceFirst(animals[i]); i++; matcher.reset(haystack); } System.out.println(haystack); }
答案 1 :(得分:0)
很多好主意。我想出了这个(工作和循环):
public static void main(String[] args) {
Pattern p = Pattern.compile("dog");
// get a matcher object
Matcher m = p.matcher("dog dog dog dog dog dog");
StringBuffer sb = new StringBuffer();
int i=1;
while(m.find())
{
if(i==1){m.appendReplacement(sb,"cat");i++;}
else if(i==2){m.appendReplacement(sb,"bird");i++;}
else if(i==3){m.appendReplacement(sb,"turtle");i=1;}
}
m.appendTail(sb);
System.out.println(sb.toString());