String.split()之后的ArrayIndexOutOfBoundsException

时间:2014-01-31 13:13:24

标签: java

我从服务器获得了一个字符串值:

String fileName = requestServer();

//My log shows fileName="properties.txt"

String name = fileName.trim().split(".")[0];

但是当我尝试使用上面的代码获取没有“.txt”的名称时,我得到了

ArrayIndexOutOfBoundsException: length=0, index=0.

我没看到我的代码错在哪里,为什么我得到这个例外?

3 个答案:

答案 0 :(得分:7)

这个:String name = fileName.trim().split(".")[0];应该是这样的:String name = fileName.trim().split("\\.")[0];。正则表达式语言中的.表示任何字符(因为String.split()regular expression作为参数。),这会导致字符串在每个字符上被拆分返回一个空数组。

\前面的.逃避这段时间,并使正则表达式引擎将其视为实际的.字符。需要额外的\才能转发初始\

答案 1 :(得分:0)

使用此

String name = fileName.trim().split("\\.")[0];

正则表达式的解释\。

.是一个正则表达式元字符,可以匹配任何内容(换行符除外)。因为我们想匹配一个文字。我们逃避它。由于Java Strings和regex引擎都使用\作为转义字符,因此我们需要使用\\

答案 2 :(得分:0)

split(...)返回一个空数组,因为它需要正则表达式作为参数。 "."代表每一个字符。正则表达式找到的字符不包含在结果中。

使用"\\."代替分割。