Java字符串:拆分字符串

恩佐

我有这个字符串:

 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您感兴趣的部分,而不是复杂的正则表达式来查找部分你想摆脱。我的意思是

  1. xx,xxx,xxx,xxxx不是的任何部分,
  2. 任何xxxx,xxxxx,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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章