为什么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]如果我改变“.” “-”都按预期工作,为什么会发生这种情况?先感谢您!
3 回答
Cats萌萌
TA贡献1805条经验 获得超9个赞
.
是正则表达式中的特殊模式标记。它匹配任何一个字符。当您拆分每个可能的字符时,您会得到一个空数组(因为什么都没有了)。相反,当您.
使用\\.
令牌转义时,将呈现为文字(并且仅匹配文字.
)。
MMTTMM
TA贡献1869条经验 获得超4个赞
\ 被称为转义字符,而 . dot 被解释为转义字符,因此您不能直接使用 dot 来拆分字符串
这就是为什么你必须使用 \ 作为带有 dot 的转义字符,以表示为字符串中的点
收到一只叮咚
TA贡献1821条经验 获得超4个赞
作为@Elliott Frisch 答案的替代方法,您也可以拆分包含在正则表达式字符类中的一个或多个字符。考虑以下代码片段:
String version = "1.2.3.4.5.6";
String[] parts = version.split("[.]");
方括号告诉正则表达式引擎将内部的任何内容视为文字字符,在本例中为文字点。当尝试拆分多个字符时,这种方法可能更有用,其中许多字符可能是元字符。使用括号表示法,我们不必担心特殊的转义语法。
添加回答
举报
0/150
提交
取消