我想将"<(><<)>"
替换为“&lt;”但它并没有取代我的情况。
public class Test2 {
public static void main(String[] args)
{
String s1 = "<(><<)>script>";
if( s1.contains("<(><<)>"))
{
s1.replaceAll("<(><<)>","<");
}
System.out.println("completeText"+s1);
}
}
答案 0 :(得分:2)
那是因为
replaceAll
的第一个参数是正则表达式,这意味着你必须逃避一些字符。replaceAll
不会改变你传递的字符串但是会建立一个新字符串)使用
s1 = s1.replaceAll("<\\(><<\\)>","<");
另请注意,您无需测试if( s1.contains("<(><<)>"))
:这会增加无用的条件,replaceAll
足够快。
答案 1 :(得分:1)
String.replaceAll
方法将第一个参数设为Regex
。因此,您需要逃避(
中具有特殊含义的)
和Regex
。
或者,您可以使用Pattern.quote
方法为您转义特殊字符。此外,您需要在return value
中存储replaceAll
string s1
方法。由于Java中的Strings
是不可变的,因此您调用的任何String类方法都返回modified string
。您需要使用返回值,否则您将看不到任何更改。
因此,您需要将代码修改为: -
s1 = s1.replaceAll(java.util.regex.Pattern.quote("<(><<)>"),"<");
如果字符串中存在pattern
,它将自动替换它,否则返回未修改的字符串。