2

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

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

4

3 回答 3

10

split()适用于正则表达式,.在正则表达式中表示任何字符(换行符除外)。此外,结果数组为空的原因是因为split()丢弃了尾随的空字符串(但是,您可以通过提供负的第二个参数让它保留空字符串):

split此方法的工作方式就像通过使用给定表达式和零限制参数调用双参数方法一样。因此,尾随的空字符串不包含在结果数组中。

可以转义.以匹配文字句点:

str.split("\\.")

相比之下,contains()使用文字字符串,所以 a.只是 a .

于 2013-08-30T18:57:06.103 回答
3

.是正则表达式的特殊字符。如果你想从字面上匹配.,那么你应该这样做:

str.split("\\.");
于 2013-08-30T18:57:53.047 回答
2

String#split()的 Javadoc 。String#contains()的 Javadoc 。一个使用正则表达式,另一个不使用。

正则表达式中的.字符表示任何字符。您可以在此处查看 regex 的 java 规则。字符的文字转义是字符在\x哪里x。因为我们使用的是 Java String 字面量,所以我们还需要转义\, 所以

"yourString".split("\\.");

或使用该Pattern.quote(String)方法。

contains()被实现为

public boolean contains(CharSequence s) {
    return indexOf(s.toString()) > -1;
}

whereindexOf查找指定的第一次出现CharSequence,在本例中为单个字符'.'

于 2013-08-30T18:56:07.807 回答