我需要对一段字符串执行简单的字符串替换操作。我遇到了以下问题并希望得到一些建议。
<div class="more">
之类的字符串替换为其他内容。 <div class="more"><a href="http://SERVER_name/profiles/atom/mv/theboard/entries/related.do?email=xyz.com&ps=20&since=1273518953218&sinceEntryId=abc-def-123-456">More...</a></div>
我试过这两种方法:
originalString.replaceFirst(moreTag, newContent);
originalString.replaceAll(moreTag, newContent);
提前致谢。
答案 0 :(得分:6)
你需要掌握替换的结果并进一步使用它:
String newString = originalString.replaceFirst(moreTag, newContent);
System.out.println(newString);
说明:Java中的字符串是不可变的。 java.lang.String
的行为方法不会改变内部价值。他们将返回修改后的结果。
如果仍然没有返回所需的结果,则moreTag
根本不匹配任何内容。您提到的方法需要regular expression。您可以在Pattern
javadoc中找到如何撰写有效的正则表达式模式。
答案 1 :(得分:0)
你能告诉我们你的代码吗?
您是否知道 moreTag 字符串(replaceFirst / replaceAll的第一个参数)被假定为正则表达式?
如果你不想在这里使用正则表达式,你可以使用普通的replace方法。
答案 2 :(得分:0)
字符串是不可变的,你保存替换操作的结果吗?
测试你的正则表达式,如果它真的符合你的想法,你会在网上找到一些工具。特别注意妥善逃避特殊角色。
另外,如果您不需要正则表达式,请考虑使用StringTokenizer和StringBuilder。
答案 3 :(得分:0)
以下是replaceAll
和replaceFirst
用法的示例:
String s = "Hi there! John here!";
s = s.replaceAll("ere", "arrr");
System.out.println(s);
// prints "Hi tharrr! John harrr!"
s = s.replaceFirst("!", "?");
System.out.println(s);
// prints "Hi tharrr? John harrr!"
正如其他人所提到的,两者实际上都是基于正则表达式的:
System.out.println("Hello???".replaceAll("?", "!"));
// throws PatternSyntaxException: Dangling meta character '?'
这里的问题是?
是正则表达式元字符,并将其视为文字问号,你必须逃避它:
System.out.println("Hello???".replaceAll("\\?", "!"));
// prints "Hello!!!"
有时字符串模式是未知的,在这种情况下,您可以使用Pattern.quote
:
String unknown = "?";
System.out.println(
"Hello???".replaceAll(Pattern.quote(unknown), "!")
); // prints "Hello!!!"
稍微复杂一点,替换字符串实际上也是基于regex的。
System.out.println(
"USD 10".replaceAll("USD", "dollar$")
);
// throws StringIndexOutOfBoundsException: index out of range: 7
要引用替换字符串,请使用Matcher.quoteReplacement
:
System.out.println(
"USD 10".replaceAll("USD", Matcher.quoteReplacement("dollar$"))
); // prints "dollar$ 10"
但是如果我只是想做一个简单的无正则表达式替换呢?
然后,要使用replaceFirst
,您必须引用模式和替换字符串:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
String replaceFrom = ...;
String replaceTo = ...;
String before = ...;
String after = before.replaceFirst(
Pattern.quote(replaceFrom), Matcher.quoteReplacement(replaceTo)
);
如果您需要replaceAll
,那么您只需使用通常的非正则表达式replace
方法:
String after = before.replace(replaceFrom, replaceTo);