内部解释split和contains方法如何适用于String

时间:2013-08-30 18:54:35

标签: java string

我只是做了一些工作并且对结果感到惊讶。让我解释一下。

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()可以识别"."

3 个答案:

答案 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的第一个出现,在这种情况下是单个字符'.'