Java的:的replaceAll不反斜线很好地工作?(Java: replaceAll doesn

2019-07-29 00:05发布

我试图替换反斜杠别的一个字符串的开头。 对于一些奇怪的原因的replaceAll功能不喜欢反斜杠。

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\xyz\\abc", "z:");

我应该怎么做来解决这个问题。

谢谢。

Answer 1:

你需要在每个反斜杠(再次)作为所使用的replaceAll()将其视为一个特殊字符模式类翻番:

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");

Java字符串对待反斜线作为转义字符等等的replaceAll看到的是: \\\\xyz\\abc 。 但也的replaceAll对待反斜杠作为转义字符所以正则表达式变为字符: \ \ x y z \ a b c



Answer 2:

它不喜欢它,因为\在C转义字符类似语言(甚至在这个论坛逃逸),这使得它成为一个文件分隔符,但它的变化,他们在MS-DOS推出一个糟糕的选择...

你的问题是,你有逃脱\两次, \\host\path变得\\\\host\\path字符串中但对正则表达式必须再次逃脱:P \\\\\\\\host\\\\path

如果你可以使用一个斜杠,这是更简单

String jarPath = "//xyz/abc/wtf/lame/";
jarPath = jarPath.replaceAll("//xyz/abc", "z:");


Answer 3:

的replaceAll()使用其使用反斜杠作为转义字符正则表达式。 此外,Java的String语法还使用反斜杠作为转义字符。 这意味着你需要加倍所有反斜杠得到你想要的东西:

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");


Answer 4:

replaceAll预计正则表达式作为它的输入字符串,则该匹配,并在每一个实例代替。 反斜线是正则表达式中一个特殊的转义字符,并且为了配合它,你需要一个反斜杠逃脱它。 所以,一个字符串匹配"\" ,则需要使用“正则表达式‘\’`。

为了匹配字符串"\\\\xyz\\abc"你所需要的正则表达式"\\\\\\\\xyz\\\\abc" (注意额外的\每个源\ ):

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");


Answer 5:

该方法的replaceAll使用正则表达式,这意味着你要逃避斜线。 在你的情况下,它可能是有意义的使用,而不是与string.replace:

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replace("\\\\xyz\\abc", "z:");


Answer 6:

jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");

对于每一个“\”在你的字符串,你应该在把“\\” replaceAll方法。



Answer 7:

你可以只用替换法,而不是在的replaceAll您的使用情况。 如果我没有记错的话这是不使用正则表达式。



Answer 8:

您可以使用replace()方法也将删除\\\\xyz\\abcString

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replace("\\\\xyz\\abc", "z:");


Answer 9:

刚刚进入一个类似的问题。

如果您在函数的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

希望能帮助到你!



文章来源: Java: replaceAll doesn't work well with backslash?