java - 如何转义回车但跳过java中已经转义的字符
问题描述
这是输入字符串:
"\"C:\\Users\\Administrator\\ram\\Microsoft\\19.070.0410.0007\remoteAccess.dll\""
我想为 remoteAccess 转义 '\r' 但将一个单独留在 \ram 中,因此结果应如下所示:
"\"C:\\Users\\Administrator\\ram\\Microsoft\\19.070.0410.0007\\remoteAccess.dll\""
我试过StringEscapeUtils
了,但它只是逃避了一切。负后视似乎在 java 中不起作用:
String sub = resp.replaceAll("(?<!\\)\\r", "\\\\r");
生产
Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed group near index 8
(?<!\)\r
有任何想法吗?
解决方案
问题是,在普通字符串\
中转义为\\
,而在正则表达式中,转义的反斜杠必须写为\\\\
. 如果你有两个转义的反斜杠......
// String as in java source: \\ is actualy a \, \" actually a ".
String resp = "\"\\\"C:\\\\Users\\\\Administrator\\\\ram\\\\Microsoft\\\\"
+ "19.070.0410.0007\\remoteAccess.dll\\\"\"";
System.out.println(resp); // The input as you did show.
// Regex solution:
String sub = resp.replaceAll("(?<!\\\\)\\\\r", "\\\\\\\\r");
String sub = resp.replaceAll("(?<!\\\\)\\\\(\\w)", "\\\\\\\\$1");
System.out.println(sub);
// Simple string replace:
String sub2 = resp.replace("\\\\", "\\").replace("\\", "\\\\");
sub2 = sub2.replace("\\\\\"", "\\\""); // Undo for \"
System.out.println(sub2);
非正则表达式的简单字符串replace
似乎最清晰。两种解决方案都不计算连续的反斜杠,无论是奇数还是偶数都会有所不同。但是非正则表达式版本更安全,因为它会替换,然后在替换后继续。
推荐阅读
- java - 如果未进行任何更改,DynamoDb 是否会更新任何内容?
- botframework - Teams 中机器人的登录卡
- javascript - 在 JavaScript 中导入带有子对象和数组的对象
- google-apps-script - 比较 2 个表中的数据并覆盖第一个表上的数据。Apps 脚本 Google 表格
- angular - 未捕获(承诺中):TypeError: t.resolve is not a function setNativePromise for Android app 中的刮刮卡功能
- python-3.x - 如何将正文发送到 Falcon 中的simulate_post
- linux - Nextcloud 16:自动导入联系人(.csv)
- android - android studio中突出显示的依赖项是什么意思
- node.js - GraphicsMagick 为透明图像添加黑色环境
- java - MS ExchangeService - 获取自定义日历(或日历列表)