Java 为什么可以';我不能用“&引用;作为split()函数中的分隔符?

Java 为什么可以';我不能用“&引用;作为split()函数中的分隔符?,java,exception,xls,delimiter,indexoutofboundsexception,Java,Exception,Xls,Delimiter,Indexoutofboundsexception,我必须获取一个输入文件,并在其名称的末尾附加一个数字以用作输出文件。为了实现这一点,我使用以下代码: String delimiter = "."; String[] splitInput = inputLocation.split(delimiter); String outputLocation = splitInput[0]; 我得到以下例外情况: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

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

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”来达到我的目的,但我很好奇为什么“.”不起作用?

拆分函数使用正则表达式,你必须用“\”来摆脱“.”

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

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


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




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

String.split()
需要一个正则表达式作为输入。在Java正则表达式中,
字符是一种特殊字符。因此,您的split语句没有按预期的方式工作。应将“.”转义为
\\。

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

[.]x
e、 g:


请参阅

中的详细信息,尝试改用“\”。我不在一个可以检查的地方,但我认为split需要一个正则表达式,而。字符代表任何字符。@LuiggiMendoza,谢谢。我在那里得到了答案。@Kylar,我的文件名类似于c:/temp/sample.xsl。。我需要c:/temp/sample,加上一个像123这样的数字,然后再加上.xls。起初,我以为我可以把整个世界分成两部分,把数字加在中间。。现在我使用“.x”进行拆分,得到第一部分,添加数字,并对扩展名进行硬编码。谢谢:)
String delimiter = "[.]x";