Java字符串分割正则表达式不按预期工作

4
以下Java代码将打印“0”。我本来期望它会打印“4”。根据Java API String.split,“围绕给定正则表达式的匹配拆分此字符串”。从链接的正则表达式文档中可以看到:
预定义字符类 . 任何字符(可能匹配换行符,也可能不匹配)
因此,我希望“Test”在每个字符上被拆分。显然,我有些误解。 System.out.println("Test".split(".").length); //0

我希望这只是出于好奇,因为有更简单的方法来找到字符串的长度... ;) - Alan Moore
3个回答

6

你说得对:每个字符都被分隔了。然而,这个函数不会返回“分隔”字符,因此结果为0。

在javadoc中重要的部分是:“因此,尾随空字符串不包括在结果数组中。”

我认为你想要使用"Test".split(".", -1).length(),但这将返回5而不是4(有5个“空格”:一个在T之前,一个在T和e之间,其他用于e-s、s-t,最后一个在最后的t之后。)


谢谢。我现在明白发生了什么。 - Jon

2
您需要使用两个反斜杠,这样就可以正常工作: 以下是示例:
String[] parts = string.split("\\.",-1);

1

一切都好。 "Test" 被分割成每个字符,因此它们之间没有字符。如果您想遍历字符串中的每个字符,可以使用 charAt 和 length 方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接