Java “命令”;stringa.replaceAll(“*”,stringb);引起错误
我试图用第二个字符串替换第一个字符串中的星号。例如,如果字符串a是“d*g”,字符串b是“in”,那么当我运行代码时,字符串a应该变成“ding”。但是,当我运行它时,会收到以下消息:Java “命令”;stringa.replaceAll(“*”,stringb);引起错误,java,string,Java,String,我试图用第二个字符串替换第一个字符串中的星号。例如,如果字符串a是“d*g”,字符串b是“in”,那么当我运行代码时,字符串a应该变成“ding”。但是,当我运行它时,会收到以下消息: java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0 * ^ at java.util.regex.Pattern.error(Unknown Source) at java.util.re
java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
*
^
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.sequence(Unknown Source)
at java.util.regex.Pattern.expr(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.lang.String.replaceAll(Unknown Source)
at Main.main(Main5.java:404)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
有什么方法可以使此代码按预期运行吗?您正在向
replaceAll
提供正则表达式“*”
,并且*
具有特殊意义
要提供文本*
,必须使用反斜杠字符转义*
,反斜杠字符本身需要在Java中转义
a = a.replaceAll("\\*", b);
该方法将正则表达式作为第一个参数。为了在正则表达式中使用*
,必须对其进行转义。然而,看起来你真的很想
或者,退出*
类似
String stringc = stringa.replaceAll("\\*", "in");
System.out.println(stringc);
两者的输出都是您请求的
ding
您要查找的是方法:
将第一个字符串的所有实例替换为第二个字符串。另一方面,该方法使用正则表达式,
“*”
本身不是正则表达式,因为星号字符是一个修饰符,表示“前一件事,重复零次或多次”.或者您可以将replaceAll
替换为replace
,在不需要或不需要正则表达式时不使用它们。作为奖励,您的代码也会运行得更快(稍微快一点)。@DavidConrad,您确定replace
比replaceAll
快吗?嗯,它不会将字符串编译成正则表达式,这一定需要一些时间,否?在我查看的版本中,唯一的区别是一个将LITERAL
标志传递给Pattern.compile
,而另一个不传递。我不确定使用标志编译是否更快。这正是我所需要的。非常感谢。
String stringa = "d*g";
String stringb = stringa.replace("*", "in");
System.out.println(stringb);
String stringc = stringa.replaceAll("\\*", "in");
System.out.println(stringc);
stringa.replace("*", stringb);