比较来自世界各地的卖家的域名和 IT 服务价格

Java 线 split 从 "." /观点/

为什么这个代码的第二行弹出
ArrayIndexOutOfBoundsException

?


String filename = "D:/some folder/001.docx";
String extensionRemoved = filename.split/"."/[0];


它有效:


String driveLetter = filename.split/"/"/[0];


我用 Java 7.
已邀请:

快网

赞同来自:

如果你愿意,你需要避免一个点 split 在

文字

观点:


String extensionRemoved = filename.split/"\\."/[0];


否则,你被分成了 regex
.

, 什么方式 "any character".

注意创建一个反向编织线所需的双重饲料松弛 regex.

你得到
ArrayIndexOutOfBoundsException

, 因为你的输入字符串只是一个点 , IE
"."

, 这是一个边界案例,它创建一个空数组 split 在这一点;
split/regex/

删除所有空白 trailing 从结果中,但由于点分离点,只留下两个空格,除了空格之后 trailing 你留在一个空的阵列。

避免收据
ArrayIndexOutOfBoundsException

对于此边界箱,请使用重载版本
https://docs.oracle.com/javase ... -int-
, 其中具有第二个参数,即结果阵列的分辨率限制。 如果是价值
limit


消极的

, 然后去除空间的行为 trailing 生成的数组关闭:


".".split/"\\.", -1/ // returns an array of two blanks, ie ["", ""]


也就是说,何时
filename

- 这只是一个点
"."

, 称呼
filename.split/"\\.", -1/[0]

将返回差距,但呼叫
filename.split/"\\."/[0]

卖空
ArrayIndexOutOfBoundsException

.

诸葛浮云

赞同来自:

". "- 这是发动机中的特殊符号。 java regex, 因此,你必须使用"\\.", 避免这个符号:


final String extensionRemoved = filename.split/"\\."/[0];


我希望它会有所帮助

二哥

赞同来自:

这是因为
.

- 这是表示任何字符的正则表达式的保留符号。
相反,我们必须使用以下声明:


String extensionRemoved = filename.split/"\\."/[0];

石油百科

赞同来自:

我相信你应该避免一个点。 尝试:


String filename = "D:/some folder/001.docx";
String extensionRemoved = filename.split/"\\."/[0];


否则,该点被解释为正则表达式中的任何字符。

要回复问题请先登录注册