Ali*_*lov 341 java regex string split indexoutofboundsexception
为什么Java中这段代码的第二行会抛出ArrayIndexOutOfBoundsException?
String filename = "D:/some folder/001.docx";
String extensionRemoved = filename.split(".")[0];
Run Code Online (Sandbox Code Playgroud)
虽然以下工作:
String driveLetter = filename.split("/")[0];
Run Code Online (Sandbox Code Playgroud)
我使用Java 7.
Boh*_*ian 690
如果要拆分文字点,则需要转义点:
String extensionRemoved = filename.split("\\.")[0];
Run Code Online (Sandbox Code Playgroud)
否则你正在拆分正则表达式.,这意味着"任何字符".
注意在正则表达式中创建单个反斜杠所需的双反斜杠.
你得到的是ArrayIndexOutOfBoundsException因为你的输入字符串只是一个点,也就是说".",这是一个在点上分割时产生空数组的边缘情况; split(regex)从结果中删除所有尾随空白,但由于在点上分割点只留下两个空格,在删除尾随空格后,您将留下一个空数组.
为了避免获得ArrayIndexOutOfBoundsException这种边缘情况,请使用重载版本split(regex, limit),该版本具有第二个参数,该参数是结果数组的大小限制.如果limit为负数,则禁用从结果数组中删除尾随空白的行为:
".".split("\\.", -1) // returns an array of two blanks, ie ["", ""]
Run Code Online (Sandbox Code Playgroud)
也就是说,当filename只是一个点时".",调用filename.split("\\.", -1)[0]将返回一个空白,但调用filename.split("\\.")[0]将抛出一个ArrayIndexOutOfBoundsException.
aim*_*haj 97
"" 是java中的特殊字符,因此必须使用"\\".逃避这个角色:
final String extensionRemoved = filename.split("\\.")[0];
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助
Gab*_*tti 33
这是因为.正则表达式中的保留字符,表示任何字符.相反,我们应该使用以下语句:
String extensionRemoved = filename.split("\\.")[0];
Run Code Online (Sandbox Code Playgroud)
izo*_*ica 19
我相信你应该逃脱这一点.尝试:
String filename = "D:/some folder/001.docx";
String extensionRemoved = filename.split("\\.")[0];
Run Code Online (Sandbox Code Playgroud)
否则,dot将被解释为正则表达式中的任何字符.
| 归档时间: |
|
| 查看次数: |
396022 次 |
| 最近记录: |