Javastring分割为“。”(点)
为什么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];
否则,你正在分解正则expression式.
,意思是“任何angular色”。
请注意,需要在正则expression式中创build一个反斜杠的双反斜杠。
你得到一个ArrayIndexOutOfBoundsException
因为你的inputstring只是一个点,即"."
,这是一个边缘情况下,在点上分割时产生一个空数组; 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中的一个特殊字符,所以你必须使用“\\”。 逃避这个angular色:
final String extensionRemoved = filename.split("\\.")[0];
我希望这有帮助
这是因为.
是正则expression式中的保留字符,表示任何字符。 相反,我们应该使用下面的语句:
String extensionRemoved = filename.split("\\.")[0];
我相信你应该躲开这个小点。 尝试:
String filename = "D:/some folder/001.docx"; String extensionRemoved = filename.split("\\.")[0];
否则,dot被解释为正则expression式中的任何字符。