如果你想分割一个点,你需要转义点literal dot:
String extensionRemoved = filename.split("\\.")[0];
否则你会在正则表达式上分裂.
,这意味着“任何字符”。
请注意在正则表达式中创建单个反斜杠所需的双反斜杠。
你会得到一个ArrayIndexOutOfBoundsException
因为你的输入字符串只是一个点,即"."
,这是一种边缘情况,当按点分割时会产生一个空数组;split(regex) https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-从结果中删除所有尾随空白,但由于在一个点上拆分一个点只留下两个空白,因此删除尾随空白后,您将留下一个空数组。
为了避免得到ArrayIndexOutOfBoundsException
对于这种边缘情况,请使用重载版本split(regex, limit) https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-int-,它有第二个参数,即结果数组的大小限制。什么时候limit
is negative,从结果数组中删除尾随空白的行为被禁用:
".".split("\\.", -1) // returns an array of two blanks, ie ["", ""]
即,当filename
只是一个点"."
, 呼叫filename.split("\\.", -1)[0]
将返回空白,但调用filename.split("\\.")[0]
会抛出一个ArrayIndexOutOfBoundsException
.