3 回答

TA貢獻(xiàn)1843條經(jīng)驗 獲得超7個贊
ReplaceAll 將其輸入視為正則表達(dá)式。正則表達(dá)式中有一些有效的轉(zhuǎn)義表達(dá)式,例如\w
單詞字符或\s
任何空格。如果file.path
是包含\
它的 Windows 路徑,則很可能具有無效的轉(zhuǎn)義序列。在任何情況下,它都不會具有您想要的含義。
其他有效的情況是在類似 Unix 的環(huán)境中嗎?(unix, linux, os-x 等) 如果是這樣它可以工作,因為這些環(huán)境/
用于路徑分隔符。
在打電話之前replaceAll
你可以試試
variable = variable.replace("\\", "\\\\"); // to escape any \ in path.

TA貢獻(xiàn)1869條經(jīng)驗 獲得超4個贊
replaceAll(regexString, replacementString)
規(guī)則 #1:
第一個輸入接受正則表達(dá)式,在您的情況下,可讀性較低。
規(guī)則#2:
第二個輸入按原樣接受用于替換的字符串文字,但根據(jù)replaceAll文檔,$或\替換字符串中的字符給出的結(jié)果與預(yù)期不同,因此這會導(dǎo)致java.lang.IllegalArgumentException: character to be escaped is missing.
解決方案片段:
public class Main {
public static void main(String[] args) {
String path = "${file.path}/fld/";
String realValue = Matcher.quoteReplacement("C:\\path\\smtg");
String variable = "\\$\\{file\\.path\\}";
path = path.replaceAll(variable, realValue);
System.out.println(path);
}
}
添加回答
舉報