您好我遇到以下代码问题(文件属于File类):
String[] fileNameSplit = file.getName().split(".");
String fileType = fileNameSplit[(fileNameSplit.length - 1)];
它始终抛出一个ArrayOutOfBoundsExecption为-1,表明fileNameSplit为0.当我取出-1时,它仍然表示ArrayOutOfBoundsException但现在为0,表示它是空的。
我做错了什么?
答案 0 :(得分:5)
这是因为.
是meta-character,接受“任何字符”。它将字符串的每个字符视为分隔符,“吞噬”其整个内容。
像这样逃离点:
String[] fileNameSplit = file.getName().split("\\.");
或使用字符类,如下所示:
String[] fileNameSplit = file.getName().split("[.]");
答案 1 :(得分:1)
使用\\.
String[] fileNameSplit = file.getName().split("\\.");
当regex
和String
彼此不顺利时,需要使用1st \
来使编译器意识到它不是dot(.)
但是一个正则表达式,第二个\
使java编译器按字面意思取\
。
答案 2 :(得分:1)
请注意,split
方法的参数是正则表达式。在正则表达式中,点具有特殊含义:匹配任何字符。
要使用点字面,您需要将其转义:
`String[] fileNameSplit = file.getName().split("\\.");`
docs用于split
方法。