Java字符串用“。”分割(点)

问题:

为什么Java代码的第二行抛出ArrayIndexOutOfBoundsException

String filename = "D:/some folder/001.docx";
String extensionRemoved = filename.split(".")[0];

下面的作品:

String driveLetter = filename.split("/")[0];

我使用Java 7。

回答:

如果要在literal点上分割,则需要转义点:

String extensionRemoved = filename.split("\\.")[0];

否则你正在分裂正则表达式.,这意味着“任何字符”。
请注意在正则表达式中创建单个反斜杠所需的双反斜杠。
你得到一个ArrayIndexOutOfBoundsException,因为您的输入字符串只是一个点,即".",这是一个边缘情况,在点分割时产生一个空数组; split(regex)从结果中删除所有尾随的空白,但是由于在点上分割点只留下两个空格,所以在删除尾部空白之后,您将留下一个空数组。
为了避免为这种边缘情况获得ArrayIndexOutOfBoundsException,请使用split(regex, limit)的重载版本,该版本具有作为结果数组的大小限制的第二个参数。当limitnegative时,从结果数组中删除尾随空白的行为被禁用:

".".split("\\.", -1) // returns an array of two blanks, ie ["", ""]

filename只是一个点".",调用filename.split("\\.", -1)[0]将返回一个空白,但调用filename.split("\\.")[0]将会抛出一个ArrayIndexOutOfBoundsException

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Java string split with “.” (dot)

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

81 + = 88