为什么此代码的第二行抛出 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
filename
is just a dot"."
, callingfilename.split("\\.", -1)[0]
will return a blank, but callingfilename.split("\\.")[0]
will throw anArrayIndexOutOfBoundsException
。