我正在尝试使用只包含特殊字符的模式替换文件中的特殊字符,但它似乎不起作用。
String special = "Something @$ great @$ that.";
special = special.replaceAll("@$", "as");
然而,当我运行时,我得到原始字符串而不是替换字符串。我究竟做错了什么?
答案 0 :(得分:7)
在您的情况下,只需使用String#replace(CharSequence target, CharSequence replacement)
替换给定的CharSequence
,如下所示:
special = special.replace("@$", "as");
或使用Pattern.quote(String s)
将String
转换为文字模式String
,如下所示:
special = special.replaceAll(Pattern.quote("@$"), "as");
如果您打算经常这样做,请考虑重用相应的Pattern
实例(类Pattern
是线程安全的,这意味着您可以共享此类的实例)以避免编译您的常规每次通话时的表达,其价格与表现有关。
所以你的代码可能是:
private static final Pattern PATTERN = Pattern.compile("@$", Pattern.LITERAL);
...
special = PATTERN.matcher(special).replaceAll("as");
答案 1 :(得分:5)
转义字符: -
String special = "Something @$ great @$ that.";
special = special.replaceAll("@\\$", "as");
System.out.println(special);
对于正则表达式,保留低于12个字符,称为元字符。如果要在正则表达式中使用任何这些字符作为文字,则需要使用反斜杠转义它们。
the backslash \
the caret ^
the dollar sign $
the period or dot .
the vertical bar or pipe symbol |
the question mark ?
the asterisk or star *
the plus sign +
the opening parenthesis (
the closing parenthesis )
the opening square bracket [
and the opening curly brace {
答案 2 :(得分:2)
方法replaceAll接受正则表达式作为替换的模式: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replaceAll(java.lang.String,%20java.lang.String)
尝试简单:
special = special.replaceAll("\\@\\$", "as");
答案 3 :(得分:1)
String special = "Something @$ great @$ that.";
System.out.println(special.replaceAll("[@][$]", "as"));
应该是这样。
答案 4 :(得分:0)
请注意,第一个给定参数不是您想要替换的字符串。这是一个正则表达式。您可以尝试构建与要替换的字符串on this site匹配的正则表达式。
[textField setBezeled:NO];
[textField setDrawsBackground:NO];
[textField setEditable:NO];
[textField setSelectable:NO];
可行,正如@Mritunjay
答案 5 :(得分:0)
special = special.replaceAll("\\W","as");
适用于所有特殊字符。