字符串与字符串类的比较

该方法提出了五种不同的方法来比较 Java 中的字符串。
我们将考虑其中的每一个。

使用“==”比较运算符

注意:“==”运算符只比较引用,而不是值。
所以这是比较文本值的不正确方法。
让我们看一个例子:

例子

String string1 = "using comparison operator";
String string2 = "using comparison operator";
String string3 = new String("using comparison operator");

assertThat(string1 == string2).isTrue();
assertThat(string1 == string3).isFalse();

如我们所见,这两个变量指向同一个字符串字面量,这就是为什么第一个断言为真,但第二个断言为假,因为 string1 是用字面量创建的,而 string3 是用 new 运算符创建的,这意味着它们引用不同的对象。

使用 equals()

此方法根据内容比较两个字符串。
这是按字符比较,忽略它们的地址。
如果两个字符串的长度相同且字符的顺序相同,则认为它们相等并返回 true。
如果字符不匹配,则返回 false。

String 类建议两种方法

  • public boolean equals(Object another) 将此字符串与指定的对象进行比较。
  • public boolean equalsIgnoreCase(String another) 将此字符串与另一个字符串进行比较,忽略大小写。

语法:

str1.equals(str2);

现在让我们看一些例子:

例子

String string1 = "comparing strings";
String string2 = "comparing strings";

String string3 = "comparing STRINGS";
String string4 = new String("comparing strings");

assertThat(string1.equals(string2)).isTrue();
assertThat(string1.equals(string4)).isTrue();

assertThat(string1.equals(null)).isFalse();
assertThat(string1.equals(string3)).isFalse();

在此示例中,string1、string2 和 string4 变量是相等的,因为无论地址如何,它们都具有相同的大小写和值。

对于 string3,该方法返回 false,因为它区分大小写。

此外,如果两个字符串中的任何一个为 null,则该方法返回 false。

现在让我们看另一个例子。

例子

public class CompareStrings {
    public static void main(String[] args) {
        String style = new String("Bold");
        String style2 = new String("Bold");
        if(style.equals(style2))
            System.out.println("相等");
        else
            System.out.println("不相等");
    }
}

这里的输出将是“相等”。

使用 equalsIgnoreCase()

如上所述,还有另一种方法,它返回一个布尔值。
此方法在比较字符串时忽略字符的大小写。

语法:

str2.equalsIgnoreCase(str1);

例子

String string1 = "using equals ignore case";
String string2 = "USING EQUALS IGNORE CASE";

assertThat(string1.equalsIgnoreCase(string2)).isTrue();

使用 compareTo()

该方法根据字典或者自然顺序按字典顺序比较两个字符串的字符。
它返回一个整数值,用于描述第一个字符串是否小于、等于或者大于第二个字符串。

假设 string1 和 string2 是两个不同的变量。
有以下三种可能的情况:

  • 字符串 1 == 字符串 2 :0
  • 字符串 1 > 字符串 2 :正值
  • string1 < string2 :负值

语法:

int str1.compareTo(String str2)

现在我们看一个例子:

例子

String author = "author";
String book = "book";
String duplicateBook = "book";

assertThat(author.compareTo(book))
  .isEqualTo(-1);
assertThat(book.compareTo(author))
  .isEqualTo(1);
assertThat(duplicateBook.compareTo(book))
  .isEqualTo(0);

使用 compareToIgnoreCase()

这与上一个方法相同。
唯一的区别是该方法忽略大小写。

例子

String author = "Author";
String book = "book";
String duplicateBook = "BOOK";

assertThat(author.compareToIgnoreCase(book))
  .isEqualTo(-1);
assertThat(book.compareToIgnoreCase(author))
  .isEqualTo(1);
assertThat(duplicateBook.compareToIgnoreCase(book))
  .isEqualTo(0);

字符串与对象类的比较

实用程序类 Objects 包含一个 equals() 方法。
比较两个字符串同样有用。

该方法首先根据地址比较两个字符串,如果相同则返回true。
如果两个参数都为空,则返回真,但如果一个参数为空,则返回假。
这是一个区分大小写的方法,因为它在内部调用 String 类的 equals() 方法。

让我们用一个例子来验证一下。

例子

String string1 = "using objects equals";
String string2 = "using objects equals";
String string3 = new String("using objects equals");

assertThat(Objects.equals(string1, string2)).isTrue();
assertThat(Objects.equals(string1, string3)).isTrue();

assertThat(Objects.equals(null, null)).isTrue();
assertThat(Objects.equals(null, string1)).isFalse();

与 Apache Commons 的字符串比较

Apache Commons 库包含一个用于字符串相关操作的实用程序类,称为 String utils 并提供用于字符串比较的有用方法。
让我们检查一下。

使用 equals() 和 equalsIgnoreCase()

我们已经介绍了 String 类的 equals() 方法,并发现它不处理空值。
相反,StringUtils 类的 equals() 方法也接受空值。
所以,我们可以说这是String类的升级版。

例子

assertThat(StringUtils.equals(null, null))
  .isTrue();
assertThat(StringUtils.equals(null, "equals method"))
  .isFalse();
assertThat(StringUtils.equals("equals method", "equals method"))
  .isTrue();
assertThat(StringUtils.equals("equals method", "EQUALS METHOD"))
  .isFalse();

StringUtils 的 equalsIgnoreCase() 方法返回一个布尔值。
这与 equals() 类似,但它忽略字符串中字符的大小写。

例子

assertThat(StringUtils.equalsIgnoreCase("equals method", "equals method"))
  .isTrue();
assertThat(StringUtils.equalsIgnoreCase("equals method", "EQUALS METHOD"))
  .isTrue();

使用 equalsAny() 和 equalsAnyIgnoreCase()

equalsAny() 方法的第一个参数是一个字符串,第二个参数是一个多参数类型的 CharSequence。
如果给定的任何其他字符串与第一个字符串区分大小写,则此方法将返回 true。
如果没有,它将返回false。

现在看看下面的例子。

例子

assertThat(StringUtils.equalsAny(null, null, null))
  .isTrue();
assertThat(StringUtils.equalsAny("equals any", "equals any", "any"))
  .isTrue();
assertThat(StringUtils.equalsAny("equals any", null, "equals any"))
  .isTrue();
assertThat(StringUtils.equalsAny(null, "equals", "any"))
  .isFalse();
assertThat(StringUtils.equalsAny("equals any", "EQUALS ANY", "ANY"))
  .isFalse();

equalsAnyIgnoreCase() 方法与前一个方法相同,但除此之外,该方法忽略了大小写。

例子

assertThat(StringUtils.equalsAnyIgnoreCase("ignore case", "IGNORE CASE", "any")).isTrue();

使用 compare() 和 compareIgnoreCase()

我们已经熟悉 String 类的 compareTo() 方法。
StringUtils 类的 compare() 方法是前一个的空安全版本,因为它通过将空值视为小于非空值来处理空值。
两个空值被认为是相等的。

此方法用于对具有空条目的字符串列表进行排序。

例子

assertThat(StringUtils.compare(null, null))
  .isEqualTo(0);
assertThat(StringUtils.compare(null, "abc"))
  .isEqualTo(-1);
assertThat(StringUtils.compare("abc", "bbc"))
  .isEqualTo(-1);
assertThat(StringUtils.compare("bbc", "abc"))
  .isEqualTo(1);

compareIgnoreCase() 方法是相同的,但它也忽略了大小写。

例子

assertThat(StringUtils.compareIgnoreCase("Abc", "bbc"))
  .isEqualTo(-1);
assertThat(StringUtils.compareIgnoreCase("bbc", "ABC"))
  .isEqualTo(1);
assertThat(StringUtils.compareIgnoreCase("abc", "ABC"))
  .isEqualTo(0);
如何比较 Java 中的字符串

JAVA中,字符串是一个字符序列。
它是Java中常用的一种数据类型,因此字符串的比较是Java中最常用的操作之一。
在本文中,我们将介绍在 Java 中比较字符串的不同方法。

日期:2020-06-02 22:15:18 来源:oir作者:oir