读书人

java中如何替换第二个被匹配到的字符串

发布时间: 2013-03-13 10:56:58 作者: rapoo

java中怎么替换第二个被匹配到的字符串?
比如
str="sssegegegsssgege";
想把第二个匹配到的sss给替换掉,替换成hello
结果就是
str="sssegegeghellogege";
应该怎么弄?
[解决办法]


String str="sssegegegsssgege";
str=str.replaceAll("(sss)(.*?)(\\1)(.*?)", "$1$2hello$4");
System.out.println(str);

[解决办法]
正则表达式果然强大。当然如果没有接触过的话,下面这种方法可能更容易理解。


/**
* 替换第二个匹配的目标子串
* @param str 源字符串。
* @param target 需要替换的目标子串。
* @param replacement 需要替换成的字符串。
* @return 将源字符串中出现的第二个target换成replacement后的字符串。
* @throws NullPointerException 当任一参数为空时。
* @throws Exception 找不到第二个匹配的字符串时。
*/
public static String replaceSecond(String str, String target,
String replacement) throws NullPointerException, Exception {
if (str == null
[解决办法]
target == null
[解决办法]
replacement == null)
throw new NullPointerException();
int index = str.indexOf(target);
if (index == -1)
throw new Exception("Not Found.");
index = str.indexOf(target, index + target.length());
if (index == -1)
throw new Exception("Not Found.");
String str1 = str.substring(0, index);
String str2 = str.substring(index);
str2 = str2.replaceFirst("sss", "hello");
return str1 + str2;
}

[解决办法]
引用:
引用:Java code?123String str="sssegegegsssgege";str=str.replaceAll("(sss)(.*?)(\\1)(.*?)", "$1$2hello$4");System.out.println(str);
麻烦问一下,为什么这样就不行了?
Java code?12345678 S……


话说因为你的img里面有需要转义的字符
str=str.replaceAll("(\\Q"+img+"\\E)(.*?)(\\1)(.*?)", "$1$2"+hello+"$4");


\Q \E之间的部分,代表里面的内容全是普通文本的引用,不要把它当作正则看待

读书人网 >J2SE开发

热点推荐