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() 无法正常运行,或者……根本没有? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
|在 java string.split() 方法中无法识别[重复]
C# String.split()用法小结。String.Split 方法 (String[],?StringSplitOptions)