将字符串拆分为数组,其中分隔符连续多次出现

时间:2017-11-11 19:42:12

标签: java regex

我有以下字符串:

Beans,,,Beans,,,Beans,,,Beans,,,playstation,,,Cool Beans,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

我正在使用它:

//split the string
String[] rowValues = row.split(",,,");

我希望rowValues的长度为17

但在上述情况下,长度仅为6.我如何处理连续多次出现的,,,

2 个答案:

答案 0 :(得分:2)

首先,您可以使用{3}表示您想要正则表达式中的三个字符。其次,将负限制传递给String.split(String, int),其中链接的Javadoc注意到如果n是非正数,那么模式将被应用尽可能多次并且数组可以有任何长度。喜欢,

String[] rowValues = row.split(",{3}", -1);

将使用您提供的输入返回 17 值;如果你真的需要16,那么你可以指定

String[] rowValues = row.split(",{3}", 16);

答案 1 :(得分:1)

一种方法是在每个,,,之后放置一个分隔符,例如,,,_,然后使用此分隔符进行拆分:

String row = "Beans,,,Beans,,,Beans,,,Beans,,,playstation,,,Cool "
    + "Beans,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,";
String[] list = Arrays.stream(row.replaceAll("(,,,)", "$1_").split("_"))
    .map(t -> t.replaceAll("(.+),{3}$", "$1"))
    .toArray(String[]::new);
System.out.println(list.length);//size = 16

输出

[Beans, Beans, Beans, Beans, playstation, Cool Beans, ,,,, ,,,, ,,,, ,,,, ,,,, ,,,, ,,,, ,,,, ,,,, ,,,]