字符串与字符串类的比较
该方法提出了五种不同的方法来比较 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 中比较字符串的不同方法。
