我无法弄清楚为什么下面的代码没有按预期运行
"Hello/You/There".replaceAll("/", "\\/");
Run Code Online (Sandbox Code Playgroud)
Hello\/You\/There
Hello/You/There
我需要向前逃避斜线吗?我不这么认为,但我也违背了我的意愿尝试了以下......没有用
"Hello/You/There".replaceAll("\\/", "\\/");
Run Code Online (Sandbox Code Playgroud)
最后,我意识到我不需要正则表达式,我只能使用以下内容,它不会创建正则表达式
"Hello/You/There".replace("/", "\\/");
Run Code Online (Sandbox Code Playgroud)
但是,我仍然想知道为什么我的第一个例子不起作用.
在下面的正则表达式中,\s
表示空格字符.我想象正则表达式解析器,正在通过字符串看到\
并知道下一个字符是特殊的.
但事实并非如此,因为需要双重逃脱.
为什么是这样?
var res = new RegExp('(\\s|^)' + foo).test(moo);
Run Code Online (Sandbox Code Playgroud)
是否有一个具体的例子说明单个逃避如何被误解为其他东西?
这是"这里到底发生了什么"的问题.我实际上并不需要解决方案.
我不得不用双反斜杠替换String中的所有单个反斜杠.这就是我最终做的......
strRootDirectory = strRootDirectory.replaceAll("\\\\", "\\\\\\\\");
Run Code Online (Sandbox Code Playgroud)
...其中strRootDirectory是上面的java.lang.String.
现在,我理解第一个参数的四个反斜杠:正则表达式需要两个反斜杠以表示单个字面反斜杠,并且java希望它们加倍.没关系.
但是,第二个参数的八个反斜杠是怎么回事?是不是替换字符串应该是文字(非正则表达式,我的意思)字符串?我希望在第二个参数中需要四个反斜杠,以表示两个反斜杠.
如何将<>包围的mapDir替换为某个字符串?
String mapDir = "D:\\mapping\\specialists\\ts_gpc\\";
String test = "foo: <mapDir> -bar";
println(test.replaceAll("<mapDir>", mapDir));
Run Code Online (Sandbox Code Playgroud)
上面给了我一个StringIndexOutOfBoundsException。
下面的代码适合我,但是我认为纯java也必须工作。
static String replaceWord(String original, String find, String replacement) {
int i = original.indexOf(find);
if (i < 0) {
return original; // return original if 'find' is not in it.
}
String partBefore = original.substring(0, i);
String partAfter = original.substring(i + find.length());
return partBefore + replacement + partAfter;
}
Run Code Online (Sandbox Code Playgroud) 我知道反斜杠用于字符转义,因此我必须使用其中两个反斜杠来编写单个反斜杠。
但为什么这不能编译呢?
"\\" => 无法编译
但是这个:
“\\\\”=>“\”
哪个\转义了什么?
先感谢您!