为什么我不能用“。”作为split()函数的分隔符?

时间:2013-09-06 17:47:50

标签: java exception xls delimiter indexoutofboundsexception

我必须获取一个输入文件,并在其名称的末尾附加一个数字以用作输出文件。为此,我使用以下代码:

String delimiter = ".";
String[] splitInput = inputLocation.split(delimiter);
String outputLocation = splitInput[0];

我得到以下异常:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

我添加了以下语句来检查splitInput数组的长度,并得到0作为输出。

System.out.println(splitInput.length);

后来,我使用“.x”作为分隔符(我的文件是.xls)。我可以使用“.x”来实现我的目的,但我很好奇为什么不会“。”工作?

4 个答案:

答案 0 :(得分:11)

split函数使用正则表达式,你必须转义你的“。”用“\”

使用正则表达式时“。”意味着任何角色。试试这个

String delimiter = "\\.x";

还应该提到的是,java中的\也是用于创建其他特殊字符的特殊字符。因此,您必须使用另一个\转义\ "\\.x"


在Java文档中有一些关于所有特殊字符及其作用的优秀文档:

Java 8 Docs
Java 7 Docs
Java 6 Docs

答案 1 :(得分:2)

.具有特殊含义:任何字符(可能与行终止符匹配也可能不匹配)。您可以在\之前转义它或使用:

[.]x

e.g:

String delimiter = "[.]x";

http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

中查看详情

答案 2 :(得分:1)

.被视为正则表达式中的任何字符。如果你想覆盖它的特殊含义,请使用转义字符\(也需要转义为\\)。

答案 3 :(得分:1)

String.split()期望正则表达式作为输入。在Java正则表达式中,.字符是一个特殊字符。因此,您的split语句无法按预期方式工作。你应该逃避你的"。"为\\.