首页 > 解决方案 > Java String split 相关的一个问题

问题描述

我发现 String split 的以下行为非常令人不快:

String[] parts = "0..".split("\\.");

这将导致部分仅包含“0”;但是,如果输入从“0..”更改为“..0”

String[] parts = "..0".split("\\.");

这将导致部分包含“”、“”和“0”。有人可以帮助解释为什么 split 会这样吗?这个方法是如何实现的?

标签: java

解决方案


引用 Java 文档:https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)

此方法的工作方式就像通过使用给定表达式和零限制参数调用双参数拆分方法一样。因此,尾随的空字符串不包含在结果数组中。

这意味着空字符串仅在至少有一个非空字符串接续它们时才包括在内。

import java.util.Arrays;
public class StringQ{

    public static void main(String args[]){
        String first = "0..";
        System.out.println(Arrays.asList(first.split("\\.")));
        // [0]
        String second = "..0";
        System.out.println(Arrays.asList(second.split("\\.")));
        // [, , 0]
        String third = "...0..0...";
        System.out.println(Arrays.asList(third.split("\\.")));
        // [, , , 0, , 0]
    }
}

推荐阅读