我有这个字符串:
String string="NNP,PERSON,true,?,IN,O,false,pobj,NNP,ORGANIZATION,true,?,p";
我如何做每四个逗号将其拆分为一个数组?我想要这样的东西:
String[] a=string.split("d{4}");
a[0]="NNP,PERSON,true,?";
a[1]="IN,O,false,pobj";
a[2]="NNP,ORGANIZATION,true,?";
a[3]="p";
如果您确实需要使用拆分,则可以使用类似
String[] array = string.split("(?<=\\G[^,]{1,100},[^,]{1,100},[^,]{1,100},[^,]{1,100}),");
如果我以前的答案中有类似但更简单的主题,请解释一下想法
演示:
String string = "NNP,PERSON,true,?,IN,O,false,pobj,NNP,ORGANIZATION,true,?,p";
String[] array = string.split("(?<=\\G[^,]{1,100},[^,]{1,100},[^,]{1,100},[^,]{1,100}),");
for (String s : array)
System.out.println(s);
输出:
NNP,PERSON,true,?
IN,O,false,pobj
NNP,ORGANIZATION,true,?
p
但是,如果您有可能不必使用split但仍想使用正则表达式,那么我建议您使用Pattern和Matcher类来创建简单的正则表达式,该正则表达式可以包含find
您感兴趣的部分,而不是复杂的正则表达式来查找部分你想摆脱。我的意思是
xx,xxx,xxx,xxx
x不是的任何部分,
xx
或xx,xx
或xxx,xxx,xxx
部分,如果他们被放置在字符串的末尾(到不匹配的数据的捕捉其余由正则表达式从点1)所以
Pattern p = Pattern.compile("[^,]+(,[^,]+){3}|[^,]+(,[^,]+){0,2}$");
应该做到的。
另一个解决方案,也许是最快(并且很容易编写)的解决方案,将是创建您自己的解析器,该解析器将遍历字符串中的所有字符,将它们存储在某个缓冲区中,计算,
已经发生的数量,以及如果数字是4个clear缓冲区的乘积,并且将其竞争内容写入数组(或更好的动态集合(如list))。这样的解析器看起来像
public static List<String> parse(String s){
List<String> tokens = new ArrayList<>();
StringBuilder sb = new StringBuilder();
int commaCounter = 0;
for (char ch: s.toCharArray()){
if (ch==',' && ++commaCounter == 4){
tokens.add(sb.toString());
sb.delete(0, sb.length());
commaCounter = 0;
}else{
sb.append(ch);
}
}
if (sb.length()>0)
tokens.add(sb.toString());
return tokens;
}
以后可以根据需要将List转换为数组,但我会继续使用List。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句