为了账号安全,请及时绑定邮箱和手机立即绑定

我需要澄清“缺少要转义的字符”异常

我需要澄清“缺少要转义的字符”异常

人到中年有点甜 2021-06-17 18:19:25
我有以下代码:public class Test {public static void main(String[] args) {    String path = "${file.path}/fld/";    String realValue = "C:\\path\\smtg\\";    String variable = "${file.path}";    path = path.replaceAll("\\$\\{" + variable.substring(2, variable.length() - 1) + "\\}", realValue);    System.out.println(path);    }}这给了我以下例外:Exception in thread "main" java.lang.IllegalArgumentException: character to be escaped is missingat java.util.regex.Matcher.appendReplacement(Matcher.java:809)at java.util.regex.Matcher.replaceAll(Matcher.java:955)at java.lang.String.replaceAll(String.java:2223)at testCode.Test.main(Test.java:9)我已经找到了一些关于这个问题的问题,但我仍然不明白这个错误。有人可以解释一下这是怎么回事吗?我知道这replace会很好用,但不幸的是我的同事不想修改这段代码。所以我需要知道确切的问题来提供解决方案,因为在其他安装中它有效。
查看完整描述

3 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

ReplaceAll 将其输入视为正则表达式。正则表达式中有一些有效的转义表达式,例如\w单词字符或\s任何空格。如果file.path是包含\它的 Windows 路径,则很可能具有无效的转义序列。在任何情况下,它都不会具有您想要的含义。

其他有效的情况是在类似 Unix 的环境中吗?(unix, linux, os-x 等) 如果是这样它可以工作,因为这些环境/用于路径分隔符。

在打电话之前replaceAll你可以试试

variable = variable.replace("\\", "\\\\"); // to escape any \ in path.


查看完整回答
反对 回复 2021-06-30
?
MMTTMM

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);

  }

}


查看完整回答
反对 回复 2021-06-30
  • 3 回答
  • 0 关注
  • 284 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信