5

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

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

4 回答 4

12

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

使用正则表达式时使用“.” 表示任何字符。试试这个

String delimiter = "\\.x";

还应该提到的是,\在java中也是一个特殊字符,用来创建其他特殊字符。因此,您必须\与另一个人一起逃脱,\因此 "\\.x"


Java 文档中有一些很棒的文档,介绍了所有特殊字符及其作用:

Java 8 文档
Java 7 文档
Java 6 文档

于 2013-09-06T17:49:20.710 回答
2

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

[.]x

例如:

String delimiter = "[.]x";

在http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html中查看更多信息

于 2013-09-06T17:56:38.893 回答
1

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

于 2013-09-06T17:49:43.060 回答
1

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

于 2013-09-06T17:51:43.657 回答