我从服务器获得了一个字符串值:
String fileName = requestServer();
//My log shows fileName="properties.txt"
String name = fileName.trim().split(".")[0];
但是当我尝试使用上面的代码获取没有“.txt”的名称时,我得到了
ArrayIndexOutOfBoundsException: length=0, index=0.
我没看到我的代码错在哪里,为什么我得到这个例外?
答案 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(...)
返回一个空数组,因为它需要正则表达式作为参数。 "."
代表每一个字符。正则表达式找到的字符不包含在结果中。
使用"\\."
代替分割。