我试图替换反斜杠别的一个字符串的开头。 对于一些奇怪的原因的replaceAll功能不喜欢反斜杠。
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\xyz\\abc", "z:");
我应该怎么做来解决这个问题。
谢谢。
我试图替换反斜杠别的一个字符串的开头。 对于一些奇怪的原因的replaceAll功能不喜欢反斜杠。
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\xyz\\abc", "z:");
我应该怎么做来解决这个问题。
谢谢。
你需要在每个反斜杠(再次)作为所使用的replaceAll()将其视为一个特殊字符模式类翻番:
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");
Java字符串对待反斜线作为转义字符等等的replaceAll看到的是: \\\\xyz\\abc
。 但也的replaceAll对待反斜杠作为转义字符所以正则表达式变为字符: \
\
x
y
z
\
a
b
c
它不喜欢它,因为\
在C转义字符类似语言(甚至在这个论坛逃逸),这使得它成为一个文件分隔符,但它的变化,他们在MS-DOS推出一个糟糕的选择...
你的问题是,你有逃脱\
两次, \\host\path
变得\\\\host\\path
字符串中但对正则表达式必须再次逃脱:P \\\\\\\\host\\\\path
如果你可以使用一个斜杠,这是更简单
String jarPath = "//xyz/abc/wtf/lame/";
jarPath = jarPath.replaceAll("//xyz/abc", "z:");
的replaceAll()使用其使用反斜杠作为转义字符正则表达式。 此外,Java的String语法还使用反斜杠作为转义字符。 这意味着你需要加倍所有反斜杠得到你想要的东西:
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");
replaceAll
预计正则表达式作为它的输入字符串,则该匹配,并在每一个实例代替。 反斜线是正则表达式中一个特殊的转义字符,并且为了配合它,你需要一个反斜杠逃脱它。 所以,一个字符串匹配"\"
,则需要使用“正则表达式‘\’`。
为了匹配字符串"\\\\xyz\\abc"
你所需要的正则表达式"\\\\\\\\xyz\\\\abc"
(注意额外的\
每个源\
):
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");
该方法的replaceAll使用正则表达式,这意味着你要逃避斜线。 在你的情况下,它可能是有意义的使用,而不是与string.replace:
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replace("\\\\xyz\\abc", "z:");
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");
对于每一个“\”在你的字符串,你应该在把“\\” replaceAll
方法。
你可以只用替换法,而不是在的replaceAll您的使用情况。 如果我没有记错的话这是不使用正则表达式。
您可以使用replace()
方法也将删除\\\\xyz\\abc
从String
String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replace("\\\\xyz\\abc", "z:");
刚刚进入一个类似的问题。
如果您在函数的replaceAll的第二部分用反斜杠(),反斜杠将dissapear,要避免这种情况,你可以使用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
希望能帮助到你!