String.split() 无法正常运行,或者……根本没有? [复制]

Posted

技术标签:

【中文标题】String.split() 无法正常运行,或者……根本没有? [复制]【英文标题】:String.split() not functioning correctly, or... at all? [duplicate] 【发布时间】:2015-01-26 16:55:02 【问题描述】:

我可能完全错了,但我已经使用 String.split(String) 很长时间了,而且我从来没有遇到过这个问题,基本上我试图将一个字符串拆分一个句点,并将其返回到一个名为breadcrumbs的数组中

当前代码:

String[] breadcrumbs = file.toString()
                .replaceAll(".java", "")
                .replaceAll("\\\\", ".")
                .split(".");
System.out.println("Length: " + breadcrumbs.length);

长度返回零,

现在,如果我取消 .split(".") 并将面包屑设为常规字符串,如下所示:

String breadcrumbs = file.toString()
                .replaceAll(".java", "")
                .replaceAll("\\\\", ".");
System.out.println(breadcrumbs);

它打印出一个非常好的目录,使用句点(如我所愿),这是输出:

C:.Users.Jellal.Desktop.Java Workspace.ogserver-framework.src.test.com.chris.server.user.Account

所以,正如您所看到的,我们有一个非常好的字符串可以使用,考虑到它是有效的,而我首先发布的“单行”代码没有,我在它被分隔时尝试了它,像这样:

String fileDir = file.toString()
                .replaceAll(".java", "")
                .replaceAll("\\\\", ".");
String[] breadcrumbs = fileDir.split(".");
System.out.println(fileDir);
System.out.println(breadcrumbs.length);

这会生成以下输出:

C:.Users.Jellal.Desktop.Java Workspace.ogserver-framework.target.test-classes.com.chris.server.user.Account.class
0

不完全确定这里发生了什么,但它似乎坏了。

【问题讨论】:

String#Split() 采用正则表达式。正则表达式中的点 (.) 具有特殊含义,因此您需要使用双反斜杠对其进行转义 @DnR - 谢谢,我不知道'.'在正则表达式中具有特殊含义,它让我陷入了循环。我从来没有真正搞砸过正则表达式。 【参考方案1】:

split的参数是一个正则表达式。你需要做split("\\.")

https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-

【讨论】:

虽然这行得通,但即使在阅读了您发布的链接(再次)之后,它对我来说仍然没有意义,我已经使用 String.split(String) 多年没有问题,有什么问题突然出现奇怪的正则表达式要求?仅仅是因为我使用的角色吗? .? 没有“突然”的要求,从(至少)Java 5 开始就是这样。要求是否“奇怪”是一种意见,但它们的“原因”在于是 API 的设计方式,可能是为了灵活性。 ;-) 不知何故,你已经多年没有注意到它,这很可能是因为直到现在你还没有使用像你所说的 . 这样的特殊字符。这是一个容易犯的错误,我知道我以前犯过。 这是因为你使用的字符。这是一个元字符,因此它必须写为 any\\.或 \\Q.\\E 或 [.] 。尽管这些选项中的第三个似乎没有记录在案,但它确实有效。 docs.oracle.com/javase/tutorial/essential/regex/literals.html

以上是关于String.split() 无法正常运行,或者……根本没有? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 String.split 需要转义管道分隔符?

|在 java string.split() 方法中无法识别[重复]

String.Split 无法获取值

python基础--str.split

C# String.split()用法小结。String.Split 方法 (String[],?StringSplitOptions)

stm32开发板无法正常写入的问题或者写入后无法正常运行的问题