【问题标题】:startsWith() method in Java returns true on an empty String. How? [duplicate]Java 中的 startsWith() 方法在空字符串上返回 true。如何? [复制]
【发布时间】:2012-04-12 21:18:38
【问题描述】:

可能重复:
Why does “abcd”.StartsWith(“”) return true?

以下简单的 Java 代码只使用了startsWith() 方法。

package startwithdemo;

final public class Main
{    
    public static void main(String[] args)
    {
        System.out.println("My String".startsWith("M"));
        System.out.println("My String".startsWith("My"));
        System.out.println("My String".startsWith(""));
    }
}

在所有情况下都显示true。前两种情况很明显,但在最后一种情况下(使用空字符串),它返回true。怎么样?

【问题讨论】:

标签: java


【解决方案1】:

因为这就是 API 的设计方式,see the javadoc

但更严重的是,一个类比可以是看集合。假设一个字符串是一组字符,那么空字符串就是空集。 In set theory,空集总是任何集合的一部分。


为什么空集是每个集的子集? (取自here

集合 A 是集合 B 的子集当且仅当 A 的每个元素 也是 B 的一个元素。如果 A 是空集,则 A 没有元素 所以它的所有元素(没有)无论如何都属于B 我们正在处理的 B 组。也就是说,空集是每个 设置。

另一种理解方式是查看交叉点。这 两个集合的交集是每个原始集合的子集。所以 如果 {} 是空集且 A 是任意集,则 {} intersect A 是 {} 这意味着 {} 是 A 的子集,而 {} 是 {} 的子集。

你可以用反证法来证明。假设你有空 集合 {} 和集合 A。根据定义,{} 是 A 的子集 除非 {} 中有某个元素不在 A 中。所以如果 {} 不是 A 的子集,则 {} 中有一个元素。但是 {} 没有元素并且 因此这是矛盾的,所以集合 {} 必须是 A 的子集。

【讨论】:

    【解决方案2】:

    来自Javadoc

    返回:如果参数表示的字符序列是 此字符串表示的字符序列的前缀;错误的 否则。 还要注意,如果参数是一个,则返回 true *空字符串* 或等于此 String 对象,由 equals(Object) 方法。

    【讨论】:

      【解决方案3】:

      这是真的:

      ("" + "My String") 显然以"" 开头。

      这与说"My String"""开头是一样的

      【讨论】:

        【解决方案4】:
        System.out.println(""+""+""+"string"=="string") // output is true;
        

        【讨论】:

          猜你喜欢
          • 2018-09-09
          • 2020-01-22
          • 2015-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-01
          • 1970-01-01
          • 2016-07-23
          相关资源
          最近更新 更多