我有以下字符串:
Beans,,,Beans,,,Beans,,,Beans,,,playstation,,,Cool Beans,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
我正在使用它:
//split the string
String[] rowValues = row.split(",,,");
我希望rowValues
的长度为17
。
但在上述情况下,长度仅为6.我如何处理连续多次出现的,,,
?
答案 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, ,,,, ,,,, ,,,, ,,,, ,,,, ,,,, ,,,, ,,,, ,,,, ,,,]