我必须获取一个输入文件,并在其名称的末尾附加一个数字以用作输出文件。为此,我使用以下代码:
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”来实现我的目的,但我很好奇为什么不会“。”工作?
答案 0 :(得分:11)
split
函数使用正则表达式,你必须转义你的“。”用“\”
使用正则表达式时“。”意味着任何角色。试试这个
String delimiter = "\\.x";
还应该提到的是,java中的\
也是用于创建其他特殊字符的特殊字符。因此,您必须使用另一个\
转义\
"\\.x"
在Java文档中有一些关于所有特殊字符及其作用的优秀文档:
答案 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语句无法按预期方式工作。你应该逃避你的"。"为\\.
。