gpt4 book ai didi

java - 如何使用转义字符在 Java 中拆分或解析字符串

转载 作者:行者123 更新时间:2023-12-04 04:50:37 25 4
gpt4 key购买 nike

我有需要在 Java 中使用各种转义字符拆分字符串的情况。格式将类似于:

id:"description",id:"description",....

id:数字(整数)
描述:字符串转义为 EscapeUtils.escapeJava(input) ,它可以包含任何
可读字符,包括 : , ,甚至 "这将是
逃到 \" .

所以, String.split方法似乎不合适,因为它可能会在 , 的描述中出现问题或 : .我知道我可以编写一些可以正常工作的算法,进行测试驱动开发甚至是一个很好的练习,但我想知道是否有一些懒惰的方法来解决它并使用某种可以做这种事情的解析器?

我的另一种可能的方法是生成一个 JSONArray 并且不要弄乱我不感兴趣的复杂性,但是它将需要一个我不相信包含在此模块中的库依赖项...

所以,我要的是关于如何解决这类问题的想法(库、使用 Java API 等)。

最佳答案

听起来你的字符串应该匹配这个正则表达式:

^(\d+:"([^"\\]|\\.)*"(,(?!$)|$))+$

在这种情况下,您可以将这些部分提取到 Map<Integer, String>通过写这样的东西:
private static final Pattern TOTAL_STRING_PATTERN =
Pattern.compile("^(\\d+:\"([^\"\\\\]|\\\\.)*\"(,(?!$)|$))+$");
private static final Pattern PARTIAL_STRING_PATTERN =
Pattern.compile("(\\d+):\"((?:[^\"\\\\]|\\\\.)*)\"");

public Map<Integer, String> parse(final String input) {
if(! TOTAL_STRING_PATTERN.matcher(input).matches()) {
throw new IllegalArgumentException();
}
final Map<Integer, String> ret = new HashMap<Integer, String>();
final Matcher m = PARTIAL_STRING_PATTERN.matcher(input);
while(m.find()) {
final Integer id = Integer.valueOf(m.group(1));
final String description = StringEscapeUtils.unescapeJava(m.group(2));
ret.put(id, description);
}
return Collections.unmodifiableMap(ret);
}

(您可能还想检查标识符是否在 int 范围之外的情况,以及同一标识符在字符串中多次出现的情况,依此类推。您可能想要制作模式在某些方面更灵活,例如,允许冒号和逗号周围有空格。但以上应该是一个好的开始。)

关于java - 如何使用转义字符在 Java 中拆分或解析字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17514574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com