Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java字符串拆分为带"&引用;(dot)_Java_Regex_String_Split_Indexoutofboundsexception - Fatal编程技术网

Java字符串拆分为带"&引用;(dot)

Java字符串拆分为带"&引用;(dot),java,regex,string,split,indexoutofboundsexception,Java,Regex,String,Split,Indexoutofboundsexception,为什么此代码的第二行抛出ArrayIndexOutOfBoundsException String filename = "D:/some folder/001.docx"; String extensionRemoved = filename.split(".")[0]; 虽然这样做有效: String driveLetter = filename.split("/")[0]; 我使用Java 7。如果要在文字点上拆分,则需要转义点: 否则,您将在regex上拆分,这意味着“任何字符”。

为什么此代码的第二行抛出
ArrayIndexOutOfBoundsException

String filename = "D:/some folder/001.docx";
String extensionRemoved = filename.split(".")[0];
虽然这样做有效:

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

我使用Java 7。

如果要在文字点上拆分,则需要转义点:

否则,您将在regex
上拆分,这意味着“任何字符”。
请注意,在正则表达式中创建单个反斜杠需要双反斜杠


您将获得一个
ArrayIndexOutOfBoundsException
,因为您的输入字符串只是一个点,即
”,这是一个边大小写,在按点拆分时生成一个空数组;从结果中删除所有尾随空格,但由于在点上拆分一个点只会留下两个空格,因此在删除尾随空格后,将留下一个空数组

要避免为此边缘情况获取
ArrayIndexOutOfBoundsException
,请使用的重载版本,该版本具有第二个参数,即结果数组的大小限制。当
limit
为负值时,将禁用从结果数组中删除尾随空格的行为:

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

例如,当
filename
只是一个点
时,调用
filename.split(“\\”,-1)[0]
将返回一个空白,但调用
filename.split(“\\”)[0]
将抛出一个
ArrayIndexOutOfBoundsException
如果要在文字点上拆分,则需要转义该点:

否则,您将在regex
上拆分,这意味着“任何字符”。
请注意,在正则表达式中创建单个反斜杠需要双反斜杠


您将获得一个
ArrayIndexOutOfBoundsException
,因为您的输入字符串只是一个点,即
”,这是一个边大小写,在按点拆分时生成一个空数组;从结果中删除所有尾随空格,但由于在点上拆分一个点只会留下两个空格,因此在删除尾随空格后,将留下一个空数组

要避免为此边缘情况获取
ArrayIndexOutOfBoundsException
,请使用的重载版本,该版本具有第二个参数,即结果数组的大小限制。当
limit
为负值时,将禁用从结果数组中删除尾随空格的行为:

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

也就是说,当
filename
只是一个点
时,调用
filename.split(“\\”,-1)[0]
将返回一个空白,但调用
filename.split(“\\”)[0]
将抛出一个
数组索引超出边界异常
这是因为
是正则表达式中的保留字符,表示任何字符。 相反,我们应该使用以下语句:

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

这是因为
是正则表达式中的保留字符,表示任何字符。 相反,我们应该使用以下语句:

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

我认为你应该避开这个点。尝试:

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

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

我认为您应该转义圆点。尝试:

String filename = "D:/some folder/001.docx";
String extensionRemoved = filename.split("\\.")[0];
否则,点将被解释为正则表达式中的任何字符。

点“.”是java正则表达式引擎中的特殊字符,因此必须使用“\\”转义此字符:

final String extensionRemoved = filename.split("\\.")[0];
我希望这有助于

点“.”是java正则表达式引擎中的一个特殊字符,因此您必须使用“\\”来转义此字符:

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

我希望这有帮助

不使用正则表达式字符串吗?在这种情况下,“.”表示任何字符……它是一个双反斜杠来分隔。split不使用正则表达式字符串吗?在这种情况下,“.”表示任何字符……它是一个双反斜杠,在Java中不是一个特殊字符。这是Java正则表达式引擎中的一个特殊字符。我的回答不太准确,但我同意你的看法。谢谢你的精确;)这是一个值得区分的地方。而且,我刚刚意识到我自己也有点搞砸了;它在Java中是一个特殊的字符,但这不是它在这里引起问题的原因。无论如何,它在Java中不是一个特殊的字符。这是Java正则表达式引擎中的一个特殊字符。我的回答不太准确,但我同意你的看法。谢谢你的精确;)这是一个值得区分的地方。而且,我刚刚意识到我自己也有点搞砸了;它在Java中是一个特殊的字符,但这不是它在这里引起问题的原因。无论如何。请注意,文件名可以包含多个点。必须使用“.”的最后一个索引,并使用它来查找文件名的子字符串。@saurabheights问题不是关于正确的正则表达式,而是为什么会有一个
ArrayIndexOutOfBoundsException
。也就是说,你错了:你不需要知道最后一个点在哪里;您只需要正确的正则表达式:
filename.split(“\\。(?=[^.]*$)”)
。这使用一个向前看来断言匹配点后面的输入中没有点。@emma您可以通过问题下方的“删除”链接自己删除它们。注意,文件名可以包含多个点。必须使用“.”的最后一个索引,并使用它来查找文件名的子字符串。@saurabheights问题不是关于正确的正则表达式,而是为什么会有一个
ArrayIndexOutOfBoundsException
。也就是说,你错了:你不需要知道最后一个点在哪里;您只需要正确的正则表达式:
filename.split(“\\。(?=[^.]*$)”)
。这使用一个向前看来断言匹配点后面的输入中没有点。@emma您可以通过问题下方的“删除”链接自己删除它们