Java字符串拆分为“.”(dot)
为什么这段代码的第二行抛出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];
否则,你将在regex上拆分.,这意味着“任何字符”。
请注意在正则表达式中创建单个反斜杠所需的双反斜杠。
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字符串拆分为“.”(dot) 的全部内容, 来源链接: utcz.com/qa/417509.html