3 回答
TA贡献1843条经验 获得超7个赞
ReplaceAll 将其输入视为正则表达式。正则表达式中有一些有效的转义表达式,例如\w
单词字符或\s
任何空格。如果file.path
是包含\
它的 Windows 路径,则很可能具有无效的转义序列。在任何情况下,它都不会具有您想要的含义。
其他有效的情况是在类似 Unix 的环境中吗?(unix, linux, os-x 等) 如果是这样它可以工作,因为这些环境/
用于路径分隔符。
在打电话之前replaceAll
你可以试试
variable = variable.replace("\\", "\\\\"); // to escape any \ in path.
TA贡献1869条经验 获得超4个赞
replaceAll(regexString, replacementString)
规则 #1:
第一个输入接受正则表达式,在您的情况下,可读性较低。
规则#2:
第二个输入按原样接受用于替换的字符串文字,但根据replaceAll文档,$或\替换字符串中的字符给出的结果与预期不同,因此这会导致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);
}
}
添加回答
举报