split的问题(String regex)

时间:2012-10-01 16:27:56

标签: java regex string exception split

您好我遇到以下代码问题(文件属于File类):

String[] fileNameSplit = file.getName().split(".");
String fileType = fileNameSplit[(fileNameSplit.length - 1)];

它始终抛出一个ArrayOutOfBoundsExecption为-1,表明fileNameSplit为0.当我取出-1时,它仍然表示ArrayOutOfBoundsException但现在为0,表示它是空的。

我做错了什么?

3 个答案:

答案 0 :(得分:5)

这是因为.meta-character,接受“任何字符”。它将字符串的每个字符视为分隔符,“吞噬”其整个内容。

像这样逃离点:

String[] fileNameSplit = file.getName().split("\\.");

或使用字符类,如下所示:

String[] fileNameSplit = file.getName().split("[.]");

答案 1 :(得分:1)

使用\\.

String[] fileNameSplit = file.getName().split("\\.");

regexString彼此不顺利时,需要使用1st \来使编译器意识到它不是dot(.)但是一个正则表达式,第二个\使java编译器按字面意思取\

答案 2 :(得分:1)

请注意,split方法的参数是正则表达式。在正则表达式中,点具有特殊含义:匹配任何字符。

要使用点字面,您需要将其转义:

`String[] fileNameSplit = file.getName().split("\\.");`

docs用于split方法。