为什么此代码的第二行抛出 ArrayIndexOutOfBoundsException ?
String filename = "D:/some folder/001.docx";
String extensionRemoved = filename.split(".")[0];
虽然这有效:
String driveLetter = filename.split("/")[0];
我使用 Java 7。
原文由 Ali Ismayilov 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果要在 文字 点上拆分,则需要转义点:
否则,您将在正则表达式
.上拆分,这意味着“任何字符”。请注意在正则表达式中创建单个反斜杠所需的双反斜杠。
你得到一个
ArrayIndexOutOfBoundsException因为你的输入字符串只是一个点,即".",这是一个边缘情况,当分割点时产生一个空数组;split(regex)从结果中删除所有尾随空白,但由于在一个点上拆分一个点只留下两个空白,因此在删除尾随空白后,您将留下一个空数组。为避免在这种极端情况下得到
ArrayIndexOutOfBoundsException,请使用split(regex, limit)的重载版本,它的第二个参数是结果数组的大小限制。当limit为 负 时,从结果数组中删除尾随空白的行为被禁用:ie, when
filenameis just a dot".", callingfilename.split("\\.", -1)[0]will return a blank, but callingfilename.split("\\.")[0]will throw anArrayIndexOutOfBoundsException。