我现在已经达到了这样的效果:
有一段文字: seo kkk seo我可以用匹配的方法匹配所有seo并且替换成其他的字样。
我让seo对应8888
替换之后的效果就是
8888 kkk 8888我是用java的pattern 来做的 它的替换是替换所有符合要求的。但是现在我想只替换第一个 符合要求的。。怎么做??
就是替换成 8888 kkk seo。
有一段文字: seo kkk seo我可以用匹配的方法匹配所有seo并且替换成其他的字样。
我让seo对应8888
替换之后的效果就是
8888 kkk 8888我是用java的pattern 来做的 它的替换是替换所有符合要求的。但是现在我想只替换
就是替换成 8888 kkk seo。
public static void main(String[] args){
String reg = "seo";
String replace = "8888";
String str = "aaa seo kkk seo ";
int index = str.indexOf(reg);
if(index != -1){
str = str.substring(0,index) + replace + str.substring(index+reg.length());
}
System.out.println(str);
}
public String replaceFirst(String replacement)替换模式与给定替换字符串匹配的输入序列的第一个子序列。
此方法首先重置匹配器。然后,它将扫描输入序列以查找该模式的匹配项。不是匹配一部分的字符被直接追加到结果字符串;在结果中匹配内容将被替换字符串替换。替换字符串可能包含到已捕获子序列的引用,如在 appendReplacement 方法中一样。 在给定正则表达式 dog、输入 "zzzdogzzzdogzzz" 和替换字符串 "cat" 的情况下,为该表达式针对匹配器调用此方法将产生字符串 "zzzcatzzzdogzzz"。调用此方法将更改此匹配器的状态。如果在将来的匹配操作中使用该匹配器,则应该首先重置它。
多看看文档,我没有调试,因为这里写的很清楚了
String reg = "seo";
String replace = "8888";
String str = "aaa seo kkk seo ";
System.out.println(replaceFirst(str, reg, replace));
} public static String replaceFirst(String str, String from, String to) {
int len = from.length();
int offset = str.indexOf(from);
if (offset < 0)
return str;
StringBuffer sb = new StringBuffer();
sb.append(str.substring(0, offset));
sb.append(to);
sb.append(str.substring(offset + len));
return sb.toString();
}
Matcher m1 = p1.matcher("seo kkk seo 999 seo jjj seo seo");
StringBuffer buf = new StringBuffer();
m1.find(1); //随便替换出现seo的位置
m1.appendReplacement(buf, "888");
m1.appendTail(buf);
println(buf);