为什么此代码的第二行抛出ArrayIndexOutOfBoundsException
String filename=“D:/some folder/001.docx”;
String extensionRemoved=filename.split(“.”[0];
虽然这样做有效:
String driveLetter=filename.split(“/”[0];
我使用Java7
如果要在文字上拆分,则需要转义点:
String extensionRemoved=filename.split(“\\”)[0];
否则,您将在regex上拆分,这意味着“任何字符”。
请注意,在正则表达式中创建单个反斜杠需要双反斜杠
您将获得一个ArrayIndexOutOfBoundsException,因为您的输入字符串只是一个点,即“”,这是一个边大小写,在按点拆分时生成一个空数组split(regex)从结果中删除所有尾随空格,但由于在一个点上拆分一个点只留下两个空格,因此在删除尾随空格后,将留下一个空数组
要避免获取此边缘案例的ArrayIndexOutOfBoundsException,请使用重载版本的split(regex,limit),它还有第二个参数,即结果数组的大小限制。当limit为负值时,将禁用从结果数组中删除尾随空格的行为:
“.split(\\.”,-1)//返回两个空格的数组,即[“”,“”]
也就是说,当filename只是一个点“时,调用filename.split(“\\”,-1)[0]将返回一个空白,但调用filename.split(“\\”)[0]将抛出一个ArrayIndexOutOfBoundsException