我正在尝试获取文件名的扩展名,但出于某种原因,我无法进行拆分工作:
System.out.println(file.getName()); //gNVkN.png
System.out.println(file.getName().split(".").length); //0
我做错了什么?
答案 0 :(得分:21)
split()
采用正则表达式(请参阅split(java.lang.String)),而不是要拆分的分隔符字符串。正则表达式"."
表示“任何单个字符”(请参阅regex),因此它将拆分在列表中不显示任何内容的任何内容上。要在文字点上拆分,请使用:
file.getName().split("\\.")// \. escapes . in regex \\ escapes \ in Java.String
通常,您可以使用Pattern.quote(str)
从字面上获取与str
匹配的正则表达式。 (由ramon建议)
file.getName().split(Pattern.quote("."))
答案 1 :(得分:5)
也许你应该重读split(java.lang.String)
的api-doc您传入的字符串是正则表达式。
尝试使用
split("\\.")
您需要双反斜杠,因为\.
是Java字符串中的无效转义。所以你需要在javastring中转义反斜杠。
答案 2 :(得分:4)
String.split()
在其参数中要求使用正则表达式,而在正则表达式中,.
将匹配任何字符。要使其正常工作,您需要添加\
,如下所示:
System.out.println(file.getName().split("\\.").length);
你需要一个反斜杠来逃避点,所以正则表达式知道你想要一个实际的点。你需要另一个反斜杠来逃避第一个反斜杠,即告诉Java你想要在你的字符串中有一个实际的反斜杠。
阅读String.split和regular expressions的javadoc以获取更多信息。