[英]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.