Java String.split()无法正常工作,或者。。。完全

Java String.split()无法正常工作,或者。。。完全,java,string,Java,String,我可能完全错了,但我已经使用String.split(String)很长时间了,我从来没有遇到过这个问题,基本上我尝试将字符串按句点分割,然后将其返回到名为breadcrumbs 当前代码: String[] breadcrumbs = file.toString() .replaceAll(".java", "") .replaceAll("\\\\", ".") .split("."); Syst

我可能完全错了,但我已经使用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);
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.src.test.com.chris.server.user.Account
因此,正如您所看到的,我们有一个非常好的字符串可以使用,考虑到这是有效的,而我首先发布的“单行”代码没有,我在分离时尝试了它,如下所示:

String breadcrumbs = file.toString()
                .replaceAll(".java", "")
                .replaceAll("\\\\", ".");
System.out.println(breadcrumbs);
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

不太清楚这里发生了什么,但它似乎坏了

split的参数是一个正则表达式。您需要执行
拆分(\\”


String#Split()
接受正则表达式。在正则表达式中,点(
)有特殊的含义,因此需要使用双精度转义backslash@DnR-谢谢,我没有意识到“.”在正则表达式中有特殊的含义,这让我很困惑。我从来没有真正弄乱过正则表达式。虽然这样做有效,但即使在阅读了你(再次)发布的链接后,我仍然觉得没有意义,我已经使用String.split(String)多年没有问题了,突然之间奇怪的正则表达式要求是怎么回事?只是因为我使用的角色吗<代码>?没有“突然”的需求,至少从Java5开始就是这样。需求是否“奇怪”是一种看法,但“它们的问题”在于,这就是API的设计方式,可能是为了灵活性;-)不知何故,你已经多年没有注意到它了,这很可能是因为直到现在你还没有使用像你所说的那样的特殊字符
。这是一个容易犯的错误,我知道我以前犯过。这是因为你使用的角色。这是一个元字符,因此它必须写为\\。或\\Q.\\E或[]。尽管第三个选项似乎没有记录在案,但它确实有效。