用“.”(点)拆分的Java字符串[重复]

为什么此代码的第二行抛出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

发表评论