在Java中比较字符串的三种不同方法

时间:2015-07-12 02:17:51

标签: java string

几个月前,我记得在接受采访时被问到三种不同的方法来比较Java中的字符串的价值。出于好奇,我将在这里问它以供我自己参考。我想到了两个:

  1. str1.equals(str2)或使用compareTo,两者都计为总数
  2. 逐个字符地比较
  3. 有什么想法吗? “==”,equalsTo,compareTo,以及它们的任何变化都不是我被告知的。

    编辑:修正了一些问题。

6 个答案:

答案 0 :(得分:4)

由于使用==存在如此巨大的异议,我无法抗拒发布 使用它的答案的诱惑(这完全有效!):)) )

    String s1 = new String("abc"); // create string object 1
    String s2 = new String("abc"); // create a different string object 2
    s1 = s1.intern();
    s2 = s2.intern();
    System.out.println(s1 == s2); // true!

因此,如果我们确保实习,我们可以依靠==

除此之外,正如我在上述评论中所建议的那样: 听起来像面试官正在寻找一个“明智的”解决方案,例如:

s1.contains(s2) && s2.contains(s1)

s1.matches(s2) && s2.matches(s1)

s1.replace(s2, "").isEmpty() && s2.replace(s1, "").isEmpty()

等等。

答案 1 :(得分:2)

除了自己查看每个角色或使用equals()compareTo()之外,我还可以考虑一些方法:

s1.startsWith(s2) && s2.startsWith(s1)
s1.contains(s2) && s2.contains(s1)
s1.indexOf(s2) == 0 && s2.indexOf(s1) == 0
Arrays.equals(s1.toCharArray(), s2.toCharArray())
s1.intern() == s2.intern()
但坦率地说,我并不认为这是一个面试问题的价值。 (如果面试官考虑到最后一个,我认为更好的问题是在使用==比较字符串值时可以安全地识别所有情况。)

答案 2 :(得分:1)

我在猜测

1)使用'=='运算符'来比较字符串引用

2)String的equals()方法,用于比较精确的字符串内容

3)equalsIgnoreCase()方法,以不敏感的方式比较字符串内容

答案 3 :(得分:1)

如果我消除考虑套管的那些,仍有很多方法,我相信我错过了一些:

s1.equals(s2)
s1.compareTo(s2)
s1.contentEquals(s2)
Objects.equals(s1, s2)
Objects.deepEquals(s1, s2)

修改

从技术上讲,这也是一种方式,但我认为这是不好的做法:

s1.intern() == s2.intern()

答案 4 :(得分:0)

有四种方式:
==
.equals()
compareTo()
compare()

阅读more

答案 5 :(得分:0)

其他一些选项可能是(look here for details) -

1。使用equals方法进行字符串比较
2。使用equalsIgnoreCase方法进行字符串比较
3。使用compareTo方法进行字符串比较
4. 使用compareToIgnoreCase方法进行字符串比较