Java中使用多个连续逗号拆分字符串

Java中使用多个连续逗号拆分字符串,java,regex,split,Java,Regex,Split,输出为4。但显然我的期望值是7。以下是我的解决方案: String abc = "a,b,c,d,,,"; String[] arr = abc.split(","); System.out.println(arr.length); 为什么会这样?谁能给我一个更好的解决方案?您可以使用前瞻: String abc = "a,b,c,d,,,"; abc += "\n"; String[] arr = abc.split(","); System.out.println(arr.length);

输出为4。但显然我的期望值是7。以下是我的解决方案:

String abc = "a,b,c,d,,,";
String[] arr = abc.split(",");
System.out.println(arr.length);
为什么会这样?谁能给我一个更好的解决方案?

您可以使用前瞻:

String abc = "a,b,c,d,,,";
abc += "\n";
String[] arr = abc.split(",");
System.out.println(arr.length);
使用:


要拆分
abc

这是因为拆分不仅包括尾随的空字符串,而且如果末尾有
\n
,则最后一个元素不是空的

String[] arr = abc.split("(?=,)");
使用
String#split()
的函数,它需要两个参数来实现这一点:

[a, b, c, d, , , \n]
这张照片

String abc = "a,b,c,d,,,";
String[] arr = abc.split(",", -1);
System.out.println(arr.length);
从上面链接的Javadoc:

如果n为非正,则图案将被应用尽可能多的次数,并且阵列可以具有任意长度。如果n为零,则将尽可能多次应用该模式,数组可以有任何长度,并且将丢弃尾随的空字符串

split()就是为这个作业编写的。 您可以按以下方式计算字符或字符串的出现次数

7

这个逻辑在Spring中使用。

正确。。使用str.split(“,”,-1);重载方法这里的情况并非如此,尽管它可以工作,但它使用特定于正则表达式的运算符使情况变得复杂。您所说的注释是什么意思?简单的前瞻如何变得复杂?答案很简单,只需读取javadoc并将参数添加到
拆分
调用,你不需要参考regex食谱就能完成这项工作。你似乎在做白日梦。谁在这里提到了regex食谱?对于未知,Java中没有regex支持就没有
split
。您知道,我知道,大多数JDEV都知道这一点(至少我希望大多数JDEV知道)……但不是每个人都知道,使用此解决方案不仅需要知道最基本的regex规则,还需要知道组和前瞻运算符。这里的情况并非如此,尽管它可以工作,使用重载的
split()
而不是regex,这使得特定于regex的操作符+1的情况变得复杂。
7
        String ch = ",";
    int count = 0;
    int pos = 0;
    int idx;
    while ((idx = abc.indexOf(ch, pos)) != -1) {
        ++count;
        pos = idx + sub.length();
    }
    System.out.println(count);