Java 字符串用 "."(点)分割

标签 java regex string split indexoutofboundsexception

为什么这段代码的第二行会抛出 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)从结果中删除所有尾随空白,但由于在一个点上拆分一个点只留下两个空白,因此删除尾随空白后,您将留下一个空数组。

为了避免在这种边缘情况下出现 ArrayIndexOutOfBoundsException,请使用 split(regex, limit) 的重载版本。 ,它有第二个参数,即结果数组的大小限制。当 limit负数时,从结果数组中删除尾随空格的行为将被禁用:

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

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

关于Java 字符串用 "."(点)分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34180443/

相关文章:

java - 需要一个 twitter API,它在给定坐标的特定位置获取推文

java - eclipse中安装环境说明

java - try/catch 捕获异常后继续执行循环

javascript - 如何替换文本中的列表项?

python - 使用文件中的正则表达式重新排列字符串

java - Jenkins 可以在 slave 日志上自定义插件到 master 吗?

Javascript 字符串到正则表达式而不转义

java - 在java中将String转换为double时出现NullpointerException

java - 未知 "NumberFormatting"问题

python - python 相同的字符串,但不同?