我想知道我是否打算以正确的方式拆分 .
上的字符串?我的代码是:
String[] fn = filename.split(".");
return fn[0];
我只需要字符串的第一部分,这就是我返回第一项的原因。我问是因为我在 API 中注意到 .
表示任何字符,所以现在我被卡住了。
原文由 Dean 发布,翻译遵循 CC BY-SA 4.0 许可协议
我在这里只看到解决方案,但没有对问题的完整解释,所以我决定发布这个答案
您需要了解一些关于 text.split(delim)
的事情。 split
方法:
delim
exists at end of text
like in a,b,c,,
(where delimiter is ,
) split
at first will创建类似 ["a" "b" "c" "" ""]
的数组,但由于在大多数情况下我们并不真正需要这些尾随的空字符串,它也会自动为我们删除它们。因此它创建了 _另一个没有这些尾随空字符串的数组并将其返回_。您还需要知道 点 .
是 正则表达式 中的 特殊字符。它代表 任何字符(行分隔符除外,但可以使用 Pattern.DOTALL
标志更改)。
因此,对于像 "abc"
这样的字符串,如果我们拆分 "."
split
方法将
["" "" "" ""]
这样的数组,这意味着我们将得到空数组 []
(没有元素,甚至没有空字符串),所以我们不能使用 fn[0]
因为没有索引 0。
要解决此问题,您只需创建代表点的正则表达式。为此,我们需要转义 .
。有几种方法可以做到这一点,但最简单的可能是使用 \
(在 String 中需要写成 "\\"
因为 \
在那里也很特别需要另一个 \
进行转义)。
所以你的问题的解决方案可能看起来像
String[] fn = filename.split("\\.");
奖金
您还可以使用其他方式来转义该点,例如
split("[.]")
split("\\Q.\\E")
Pattern.LITERAL
标志的正确模式实例split(Pattern.quote("."))
并让正则表达式为你转义。原文由 Pshemo 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
split()
接受正则表达式,因此您需要转义.
不将其视为正则表达式元字符。这是一个例子: