我只是做了一些工作并且对结果感到惊讶。让我解释一下。
String str = "aaa.jpg";
String[] str1 = str.split("."); //output of this is empty array with size 0
str.contains("."); //output of this is true.
任何人都可以解释为什么split()
方法无法识别"."
,contains()
可以识别"."
。
答案 0 :(得分:10)
split()
适用于正则表达式,.
in regex表示任何字符(换行符除外)。此外,结果数组为空的原因是因为split()
丢弃尾随空字符串(但是你可以通过提供负的第二个参数来保持空字符串):
此方法的作用就像通过使用给定表达式和limit参数为零调用双参数
split
方法一样。因此,尾随空字符串不包含在结果数组中。
可以转义.
以匹配文字句点:
str.split("\\.")
相比之下,contains()
适用于文字字符串,因此.
只是.
。
答案 1 :(得分:3)
.
是正则表达式的特殊字符。
如果你想要与.
字面匹配,那么你应该这样做:
str.split("\\.");
答案 2 :(得分:2)
String#split()的Javadoc。 String#contains()的Javadoc。一个使用正则表达式,另一个不使用。
正则表达式中的.
字符表示任何字符。您可以查看正则表达式here的java规则。角色的文字转义是\x
,其中x
是角色。因为我们使用Java String文字,所以我们还需要转义\
,所以
"yourString".split("\\.");
或使用Pattern.quote(String)
方法。
contains()
实现为
public boolean contains(CharSequence s) {
return indexOf(s.toString()) > -1;
}
其中indexOf
找到指定CharSequence
的第一个出现,在这种情况下是单个字符'.'
。