使用java我尝试用其他字符串替换某些字符串的出现。它适用于大多数情况。但有时某些字符串不会在给定内容中被替换。
当我使用indexOf方法搜索给定内容中的某个字符串时,我可以正确地获取该String的索引。但是,当我使用replaceFirst方法替换该String时,操作以失败结束。
然后我尝试使用以下替换以逃避转义字符。
cont = Pattern.compile(str, Pattern.LITERAL).matcher(cont)
.replaceFirst(Matcher.quoteReplacement("replace string"))
让我们以下面的内容为例
请给动物的照片 访问这个网站 http://www.example.net/animals/cat_345_456.JPG 。更多细节请访问此链接 也 http://www.moredetails.com/example/imgs/nwr_1453446_83223_429054_1603367_42.PNG?Id=1450686&lid=423454&idp=4402767&ps=4563223&circle=4&type=2&zw=264&zh=150&v=5&url=NA&uid= 。谢谢访问我们。
在上面的内容首先我指定值为http://www.example.net/animals/cat_345_456.JPG的str,然后我调用替换第一种方法。
在这种情况下,预期的字符串会正确替换。
然后现在我指定值为http://www.moredetails.com/example/imgs/nwr_1453446_83223_429054_1603367_42.PNG?Id=1450686&lid=423454&idp=4402767&ps=4563223&circle=4&type=2&zw=264&zh=150&v=5&url=NA&uid=的str并且我调用replace first method。
但这一次它没有被取代。但是当我使用String.indexof方法时,它正确地给出了该String的索引号。
我错过了什么吗?
请帮忙。提前谢谢。
答案 0 :(得分:1)
你的代码对我来说很好......这是我的测试代码: -
public class StringReplaceTest {
public static String replaceMe(String str) {
String cont = "For the pictures of animal please visit this site http://www.example.net/animals/cat_345_456.JPG . Also more details visit this link also http://www.moredetails.com/example/imgs/nwr_1453446_83223_429054_1603367_42.PNG?Id=1450686&lid=423454&idp=4402767&ps=4563223&circle=4&type=2&zw=264&zh=150&v=5&url=NA&uid= . Thanks visiting us.";
return Pattern.compile(str, Pattern.LITERAL).matcher(cont).replaceFirst(Matcher.quoteReplacement("replace string"));
}
@Test
public void testOne() {
String str = "http://www.moredetails.com/example/imgs/nwr_1453446_83223_429054_1603367_42.PNG?Id=1450686&lid=423454&idp=4402767&ps=4563223&circle=4&type=2&zw=264&zh=150&v=5&url=NA&uid=";
String actual = StringReplaceTest.replaceMe(str);
String expected = "For the pictures of animal please visit this site http://www.example.net/animals/cat_345_456.JPG . Also more details visit this link also replace string . Thanks visiting us.";
assertEquals(expected, actual);
}
@Test
public void testTwo() {
String str = "http://www.example.net/animals/cat_345_456.JPG";
String actual = StringReplaceTest.replaceMe(str);
String expected = "For the pictures of animal please visit this site replace string . Also more details visit this link also http://www.moredetails.com/example/imgs/nwr_1453446_83223_429054_1603367_42.PNG?Id=1450686&lid=423454&idp=4402767&ps=4563223&circle=4&type=2&zw=264&zh=150&v=5&url=NA&uid= . Thanks visiting us.";
assertEquals(expected, actual);
}
}
答案 1 :(得分:0)
我相信如果它不起作用,你的搜索目标会包含一些对模式有意义的特殊字符。例如()[] {}等。必须使用反斜杠转义这些东西。但乔恩是对的:简短的例子解释并帮助更多。