Java中如何转义String内的逗号,避免被outputUtill函数误拆分?
问题背景
现有字符串 String str = "13-005B,162-,0000-",以及工具函数 outputUtill,该函数的输入格式要求为 ="(string1 value)","=(string2 value)","=(string3 value)",内部默认以 "," 作为分隔符拆分输入字符串。
现在需要实现:将上述字符串格式化为 ="13-005B,162-,0000-" 传入 outputUtill 时,内部不会把字符串里的逗号识别为分隔符,也就是不会拆分出3个错误子串:
- 13-005B
- 162-
- 0000-
示例参考
传入 outputUtill 的完整输入内容如下:
="370143030",="SPRING TOWNSHIP CENTRE",="1869 ZION ROAD BELLEFONTE PA 16823",="8143551",="02",="13-005B,162-,0000-",
期望输出结果:
370143030 SPRING TOWNSHIP CENTRE 1869 ZION ROAD BELLEFONTE PA 16823 8143551 02 13-005B,162-,0000-
解决方案
方案1(优先选择,可修改outputUtill内部逻辑时使用)
不需要对str内部的逗号做额外转义,只要把outputUtill的拆分逻辑从简单的按逗号拆分,调整为按格式匹配提取字段即可,Java示例代码如下:
// 正则匹配所有 ="xxx" 格式的字段,自动提取引号内的完整内容 Pattern pattern = Pattern.compile("=\"(.*?)\""); Matcher matcher = pattern.matcher(输入字符串); List<String> result = new ArrayList<>(); while (matcher.find()) { result.add(matcher.group(1)); }
该逻辑会自动忽略所有引号内部的逗号,完全符合预期输出要求。
方案2(无法修改outputUtill内部逻辑时使用)
构造输入前先把str里的逗号替换为业务场景中绝对不会出现的临时占位符,等拿到outputUtill的拆分结果后,再把占位符替换回逗号即可,示例逻辑:
// 构造输入前替换逗号为占位符 String processedStr = str.replace(",", "{{TEMP_COMMA}}"); // 按要求格式构造输入内容传入outputUtill String inputContent = "=\"" + processedStr + "\""; // 拿到拆分结果后,把占位符换回逗号 String finalValue = 拆分结果.replace("{{TEMP_COMMA}}", ",");
内容的提问来源于stack exchange,提问作者Rishikesh-12
相关产品推荐
相关产品推荐

