猿问

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]

如果我改变“.” “-”都按预期工作,为什么会发生这种情况?先感谢您!


一只甜甜圈
浏览 193回答 3
3回答

Cats萌萌

.是正则表达式中的特殊模式标记。它匹配任何一个字符。当您拆分每个可能的字符时,您会得到一个空数组(因为什么都没有了)。相反,当您.使用\\.令牌转义时,将呈现为文字(并且仅匹配文字.)。

MMTTMM

\ 被称为转义字符,而 . dot 被解释为转义字符,因此您不能直接使用 dot 来拆分字符串这就是为什么你必须使用 \ 作为带有 dot 的转义字符,以表示为字符串中的点

收到一只叮咚

作为@Elliott Frisch 答案的替代方法,您也可以拆分包含在正则表达式字符类中的一个或多个字符。考虑以下代码片段:String version = "1.2.3.4.5.6";String[] parts = version.split("[.]");方括号告诉正则表达式引擎将内部的任何内容视为文字字符,在本例中为文字点。当尝试拆分多个字符时,这种方法可能更有用,其中许多字符可能是元字符。使用括号表示法,我们不必担心特殊的转义语法。
随时随地看视频慕课网APP

相关分类

Java
我要回答