gpt4 book ai didi

java - 如何避免在括号中用逗号拆分?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:48:20 25 4
gpt4 key购买 nike

我在下面有一个字符串,我想用多个分隔符拆分成字符串数组。

分隔符有逗号(,)、分号(;)、“OR”和“AND”。但如果它在括号中,我不想在逗号上拆分。

示例输入:

device_name==device503,device_type!=GATEWAY;site_name<site3434 OR country==India AND location==BLR; new_name=in=(Rajesh,Suresh)

我可以用正则表达式拆分字符串,但它不能正确处理括号中的逗号。

我该如何解决这个问题?

Pattern ptn = Pattern.compile("(,|;|OR|AND)");
String[] parts = ptn.split(query);
for(String p:parts){
System.out.println(p);
queryParams.add(p.trim());
}

最佳答案

您可以使用否定的前瞻性:。

String[] parts = input.split(",(?![^()]*\\))|;| OR | AND ")

或者更丑陋(但可能在概念上更简单)的方法是用临时占位符替换括号内的任何逗号,然后进行拆分并在结果中用真正的逗号替换占位符。

String input = "X,Y=((A,B),C) OR Z";

Pattern pattern = Pattern.compile("\\(.*\\)");
Matcher matcher = pattern.matcher(input);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(sb, matcher.group().replaceAll(",", "_COMMA_"));
}
matcher.appendTail(sb);

String[] parts = sb.toString().split("(,|;| OR | AND )");
for (String part : parts) {
System.out.println(part.replace("_COMMA_", ","));
}

打印:

X
Y=((A,B),C)
Z

或者,您可以编写自己的小分词器,使用 charAt(index) 逐个字符地读取输入,或者为现成的解析器定义语法。

关于java - 如何避免在括号中用逗号拆分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48279857/

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