java split()究竟如何工作?

Zic*_* Ma 2 java split

为什么split()在java中使用的方式不同?我想分割一个这样的版本字符串:1.2.3.4但是如果我喜欢这样:将获得一个空数组,如果我使用split("\\.")它,它可以像我期望的那样工作:

        String version1 = "1.2.3.4.5";
        String version2 = "1.2.3.4.5.6";
        String[] v1Arr = version1.split("."); 
        String[] v2Arr = version2.split("\\."); 
        System.out.println(Arrays.toString(v1Arr)); // [] why?
        System.out.println(Arrays.toString(v2Arr)); // [1, 2, 3, 4, 5, 6]


String version1 = "1-2-3-4-5";
String version2 = "1-2-3-4-5-6";
String[] v1Arr = version1.split("-");
String[] v2Arr = version2.split("\\-");

System.out.println(Arrays.toString(v1Arr)); // [1, 2, 3, 4, 5]
System.out.println(Arrays.toString(v2Arr)); // [1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

如果我改变"." " - "都按预期工作,为什么会这样?先感谢您!

Ell*_*sch 6

.是正则表达式中的特殊模式标记.它匹配任何一个字符.当你拆分每个可能的角色时,你得到一个空数组(因为没有任何东西).相反,当你转义.\\.,令牌被渲染为文字(并且仅匹配文字.).