2017-04-13 71 views
0

我有下面的代碼字符串forwardslash被替換

String outputStr = "-XX:-HeapDumpOnOutOfMemoryError -XX:MaxPermSize=64m -Xms24m -Dcom.sun.management.jmxremote.password.file=\"E:Java\\jmx-management\\jmxremote.password\" -Djava.awt.headless=true"; 

outputStr.replaceAll("-Dcom.sun.management.jmxremote.password.file=[\"\\w\\=\\.\\!\\#\\$\\%\\&\\*\\+\\-\\~\\:\\;\\,\\@\\|\\\\\\/]+", 
    "-Dcom.sun.management.jmxremote.password.file=\"E:\\Java\\jmx-management\\jmxremote.password\""); 

這是給我

-XX:-HeapDumpOnOutOfMemoryError -XX:MaxPermSize=64m -Xms24m -Dcom.sun.management.jmxremote.password.file="E:Javajmx-managementjmxremote.password" -Djava.awt.headless=true 

而且我想這個

-XX:-HeapDumpOnOutOfMemoryError -XX:MaxPermSize=64m -Xms24m -Dcom.sun.management.jmxremote.password.file="E:\Java\jmx-management\jmxremote.password" -Djava.awt.headless=true 

沒有的replaceAll改變

"-Dcom.sun.management.jmxremote.password.file=\"E:\\Java\\jmx-management\\jmxremote.password\"" 
+1

使用4反斜槓在替換字符串來表示1個反斜槓。 –

+0

您的標題引用「forwardslash [sic]」,但您的代碼示例不包含正斜槓。 WTF? –

回答

0

您的正則表達式中的主要問題是您需要在Java替換字符串文字中使用4個反斜槓來替換爲1個文字反斜線。然而,也有一些,我想更多評論小事:

  • overescaping - 大多數字符類的字符可以留下轉義,因爲它們是在一個字符類文本字符幾乎所有的治療,
  • 要保持圖案的部分可以捕獲和反向引用它可以在置換方式使它更短的使用,
  • 點必須在字符類的外部逃出來表示文字點。

參見Java demo

String outputStr = "-XX:-HeapDumpOnOutOfMemoryError -XX:MaxPermSize=64m -Xms24m -Dcom.sun.management.jmxremote.password.file=\"E:Java\\jmx-management\\jmxremote.password\" -Djava.awt.headless=true"; 
outputStr = outputStr.replaceAll("(-Dcom\\.sun\\.management\\.jmxremote\\.password\\.file=)[-\"\\w=.!#$%&*+~:;,@|\\\\/]+", 
    "$1\"E:\\\\Java\\\\jmx-management\\\\jmxremote.password\""); 
System.out.println(outputStr); 
// => -XX:-HeapDumpOnOutOfMemoryError -XX:MaxPermSize=64m -Xms24m -Dcom.sun.management.jmxremote.password.file="E:\Java\jmx-management\jmxremote.password" -Djava.awt.headless=true 
1
String outputStr = "-XX:-HeapDumpOnOutOfMemoryError -XX:MaxPermSize=64m -Xms24m -Dcom.sun.management.jmxremote.password.file=\"E:Java\\jmx-management\\jmxremote.password\" -Djava.awt.headless=true"; 
outputStr = outputStr.replace("\\\\", "\\");