1

嗨,我在下面的代码中遇到问题(文件属于 File 类):

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

它总是在 -1 处抛出 ArrayOutOfBoundsExecption,表明 fileNameSplit 为 0。当我取出 -1 时,它仍然显示 ArrayOutOfBoundsException 但现在为 0,这意味着它是空的。

我究竟做错了什么?

4

3 回答 3

5

这是因为.它是一个接受“任何字符”的元字符。它将字符串的每个字符都视为分隔符,“吃掉”其全部内容。

像这样逃避点:

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

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

String[] fileNameSplit = file.getName().split("[.]");
于 2012-10-01T16:29:38.393 回答
1

采用\\.

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

由于regexString彼此不协调,\需要使用第一个来使编译器意识到它不是dot(.)一个正则表达式,第二个\是使 java 编译器\按字面意思理解。

于 2012-10-01T16:29:08.077 回答
1

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

要从字面上使用点,您需要对其进行转义:

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

split方法的文档。

于 2012-10-01T16:29:30.640 回答