为什么split()会失败?

时间:2009-10-31 10:58:02

标签: java split

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

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

我做错了什么?

3 个答案:

答案 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.splitregular expressions的javadoc以获取更多信息。