.jpg)
为什么这段代码的第二行会抛出?ArrayIndexOutOfBoundsException
String filename = "D:/some folder/001.docx";
String extensionRemoved = filename.split(".")[0];
虽然这有效:
String driveLetter = filename.split("/")[0];
我使用 Java 7。

如果要在文字点上拆分,则需要转义点:
String extensionRemoved = filename.split("\.")[0];
否则,您将在正则表达式上拆分,这意味着“任何字符”。
请注意在正则表达式中创建单个反斜杠所需的双反斜杠。.
你得到一个,因为你的输入字符串只是一个点,即,这是一个边缘情况,当拆分为点时会产生一个空数组; 从结果中删除所有尾随空白,但由于在点上拆分一个点只会留下两个空白,因此在删除尾随空白后,您将留下一个空数组。ArrayIndexOutOfBoundsException"."split(regex)
为避免针对此边缘情况获取 ,请使用重载版本 ,该版本具有第二个参数,即生成的数组的大小限制。当为负数时,将禁用从生成的数组中删除尾随空白的行为:ArrayIndexOutOfBoundsExceptionsplit(regex, limit)limit
".".split("\.", -1) // returns an array of two blanks, ie ["", ""]
即当只是一个点时,调用将返回一个空白,但调用将抛出一个.filename"."filename.split("\.", -1)[0]filename.split("\.")[0]ArrayIndexOutOfBoundsException

点 “.” 是 Java 正则表达式引擎中的一个特殊字符,因此您必须使用 “\.” 来转义此字符:
final String extensionRemoved = filename.split("\.")[0];

这是因为 是正则表达式中的保留字符,表示任何字符。
相反,我们应该使用以下语句:.
String extensionRemoved = filename.split("\.")[0];
模板简介:该模板名称为【 为什么这段代码的第二行会抛出?Java 字符串用 “.”(点)】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。