繁体   English   中英

为什么split()会失败?

[英]Why does this split() fail?

我正在尝试获取文件名的扩展名,但由于某种原因我无法进行拆分工作:

System.out.println(file.getName()); //gNVkN.png
System.out.println(file.getName().split(".").length); //0

我究竟做错了什么?

split()采用正则表达式(请参阅split(java.lang.String) ),而不是要拆分的分隔符字符串。 正则表达式"." 表示“任何单个字符”(请参阅正则表达式 ),因此它将拆分在您列表中不存在任何内容的任何内容上。 要在文字点上拆分使用:

file.getName().split("\\.")// \. escapes . in regex \\ escapes \ in Java.String

在一般情况下,你可以使用Pattern.quote(str)来获得相匹配的正则表达式str字面上。 ramon建议)

file.getName().split(Pattern.quote("."))

也许你应该重读api-doc for split(java.lang.String)

传入的字符串是正则表达式

尝试使用

split("\\.")

你需要双反斜杠,因为\\. 是Java字符串中的无效转义。 所以你需要在javastring中转义反斜杠本身。

String.split()在其参数和正则表达式中请求正则表达式. 将匹配任何角色。 要使其工作,您需要添加\\ ,如下所示:

System.out.println(file.getName().split("\\.").length);

你需要一个反斜杠来逃避点,所以正则表达式知道你想要一个实际的点。 你需要另一个反斜杠来逃避第一个反斜杠,即告诉Java你想要在你的字符串中有一个实际的反斜杠。

阅读String.split的javadoc和正则表达式以获取更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM