首页 > Java >  为什么这段代码的第二行会抛出?Java 字符串用 “.”(点)

 为什么这段代码的第二行会抛出?Java 字符串用 “.”(点)

上一篇 下一篇

为什么这段代码的第二行会抛出?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】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 246次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 04-15
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
响应式 单页式简历模板 微信文章 微信公众平台 html5 微信模板 微信图片 企业网站 微信素材 自适应
您可能会喜欢的其他模板