有人能解释一下,为什么我在运行这个方法替换值时遇到了数组越界异常,该方法使用 $
符号进行替换?
例如,我传入的消息是 $$vmdomodm$$
message = message.replaceAll("$", "$");
我尝试查看这个论坛帖子,但无法理解其内容。
http://www.coderanch.com/t/383666/java/java/String-replaceAll
(注:本翻译仅供参考,不保证准确性和完整性)
有人能解释一下,为什么我在运行这个方法替换值时遇到了数组越界异常,该方法使用 $
符号进行替换?
例如,我传入的消息是 $$vmdomodm$$
message = message.replaceAll("$", "$");
我尝试查看这个论坛帖子,但无法理解其内容。
http://www.coderanch.com/t/383666/java/java/String-replaceAll
这是一个特殊字符,你需要使用转义字符来处理。
试试这个 \\$
如果你的代码中尝试用相同的内容替换原内容,那么这是没有意义的。
String message = "$$hello world $$";
message = message.replaceAll("\\$", "_");
System.out.println(message);
输出
__hello world __
更新
String message = "$hello world $$";
message = message.replaceAll("$", "\\$");
System.out.println(message);
输出
$hello world $$
由于您并没有真正使用任何正则表达式,因此您应该使用String#replace方法来替换字符串,像这样:
message = message.replace("$", "$");
if(!str.isempty() && str.contains("$")){
str = str.replaceAll("\\$", Matcher.quoteReplacement("\\$"))
}
在尝试使用replaceAll()时,我一直无法得到想要的结果,所以我认为编写一个函数来转义美元符号会更容易。
public static String escapeDollarSign(String value) {
Pattern p = Pattern.compile("\\$");
int off = 0;
while (true) {
Matcher m = p.matcher(value.substring(off));
if (!m.find()) break;
int moff = m.start();
String left = value.substring(0, off+moff);
String right = value.substring(off+moff+1, value.length());
value = left+"\\$"+right;
off += moff+1+1;
}
return value;
}
дЊЛе¶ВпЉЪ
$re$gex $can $ b$e a$ pain$
еПШжИР
\$re\$gex \$can \$ b\$e a\$ pain\$