How to split a comma-delimited string into an array of empty strings

前端 未结 1 1646
借酒劲吻你
借酒劲吻你 2020-12-09 17:38

I want to split \",,,\" to a array of 4 \"\" using the String.split()

Here is my code:

String str = \",,,\";           


        
相关标签:
1条回答
  • 2020-12-09 18:12

    You need to use the overloaded String#split(regex, limit) method which takes in the limit parameter.

    String[] tokens = str.split(",", -1);
    

    From the docs(emphasis mine):

    The limit parameter controls the number of times the pattern is applied and therefore affects the length of the resulting array. If the limit n is greater than zero then the pattern will be applied at most n - 1 times, the array's length will be no greater than n, and the array's last entry will contain all input beyond the last matched delimiter. If n is non-positive then the pattern will be applied as many times as possible and the array can have any length. If n is zero then the pattern will be applied as many times as possible, the array can have any length, and trailing empty strings will be discarded.


    Explanation: When you do not provide the limit argument or provide "zero" as the limit, the split() discards trailing empty fields. When you provide a positive limit argument, it limits the number of fields to that particular limit. But when you provide a negative limit, the split() method allows any number of fields and also not discarding the trailing empty fields. To be more clear, have a look at the source code of the Pattern#split(regex, limit) which has this snippet at the end(comments have been added by me and were not present in the actual source code).

    if (limit == 0) // When zero or no arg is given
        while (resultSize > 0 && matchList.get(resultSize-1).equals("")) // if trailing entries are blank
            resultSize--; // remove them out
    

    Note: If you do not provide any limit argument, the split() method without limit argument calls the overloaded split() method like this.

    public String[] split(String regex) {
        return split(regex, 0);
    }
    

    And also note that, String#split(regex, limit) internally calls the Pattern#split(regex, limit).

    0 讨论(0)
提交回复
热议问题