我正在尝试用反斜杠替换字符串的开头。 由于一些奇怪的原因,replaceAll函数不喜欢反斜杠。
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\xyz\\abc", "z:");
我该怎么做才能解决这个问题。
谢谢。
答案 0 :(得分:3)
您需要将每个反斜杠加倍(再次),因为replaceAll()使用的Pattern类将其视为特殊字符:
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");
Java字符串将反斜杠视为转义字符,因此replaceAll看到的是:\\\\xyz\\abc
。但replaceAll也将反斜杠视为转义字符,因此正则表达式变为字符:\
\
x
y
z
\
{{1 }} a
b
答案 1 :(得分:3)
它不喜欢它,因为\
是C语言中的转义字符(即使是在这个论坛上的转义)这使得它成为文件分隔符的不良选择,但它在MS中引入了它的变化-DOS ...
您遇到的问题是,您已经\
两次转义,因此\\host\path
变为\\\\host\\path
字符串,但必须再次转义正则表达式:P \\\\\\\\host\\\\path
如果你可以使用正斜杠,那就更简单了
String jarPath = "//xyz/abc/wtf/lame/";
jarPath = jarPath.replaceAll("//xyz/abc", "z:");
答案 2 :(得分:2)
replaceAll()使用使用反斜杠作为转义字符的正则表达式。此外,Java String语法还使用反斜杠作为转义字符。这意味着你需要将所有反斜杠加倍才能得到你想要的东西:
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");
答案 3 :(得分:2)
replaceAll
期望一个正则表达式作为其输入字符串,然后在每个实例中进行匹配和替换。反斜杠是正则表达式中的特殊转义字符,为了匹配它,您需要另一个反斜杠来转义它。因此,要将字符串与"\"
匹配,您需要一个带有“”\“`的正则表达式。
要匹配字符串"\\\\xyz\\abc"
,您需要使用正则表达式"\\\\\\\\xyz\\\\abc"
(请为每个来源\
注意额外的\
):
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");
答案 4 :(得分:1)
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");
对于字符串中的每个'\',您应该在replaceAll
方法中添加'\\'。
答案 5 :(得分:1)
replaceAll方法使用正则表达式,这意味着您必须转义斜杠。在您的情况下,使用String.replace可能是有意义的:
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replace("\\\\xyz\\abc", "z:");
答案 6 :(得分:0)
您可以在用例中使用replace方法而不是replaceAll。如果我没弄错的话,它不会使用正则表达式。
答案 7 :(得分:0)
您也可以使用replace()
方法删除\\\\xyz\\abc
String
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replace("\\\\xyz\\abc", "z:");
答案 8 :(得分:0)
刚遇到类似的问题。
如果在replaceAll函数的第二部分中使用反斜杠(),则反斜杠会消失,为避免这种情况,可以使用Matcher类。
String assetPath="\Media Database\otherfolder\anotherdeepfolder\finalfolder";
String assetRemovedPath=assetPath.replaceAll("\\\\Media Database(.*)", Matcher.quoteReplacement("\\Media Database\\_ExpiredAssets")+"$1");
system.out.println("ModifiedPath:"+assetRemovedPath);
打印:
\Media Database\_ExpiredAssets\otherfolder\anotherdeepfolder\finalfolder
希望它有所帮助!