如何比较两个字符串 Java

⚡ 智能摘要

比较两个字符串 Java 可以通过多种方法来比较字符序列的相等性或顺序。本文介绍了七种方法,包括字符串相等、对象相等、compareTo、StringUtils 方法、== 运算符以及自定义比较方法,每种方法都附有示例。

  • 🟰 字符串 equals(): 比较两个字符串值是否区分大小写,返回 true 或 false。
  • 📦 对象相等(): 安全地比较两个字符串,将两个空值视为相等。
  • 🔤 compareTo(): 按字典顺序比较字符串,返回零、负数或正数。
  • 🧰 StringUtils 方法: Apache Commons 中的 equals() 和 equalsAny() 函数可以比较字符串并优雅地处理 null 值。
  • ⚠️ == OperaTOR: 它比较的是对象引用,而不是内容,因此不应用于值比较。

如何比较两个字符串 Java

比较字符串的方法 Java

Java 提供了可用于比较两个字符串的不同方法 Java. 字符串比较 Java 是将字符序列与字符串进行匹配的功能。

要了解如何比较字符串 Java您可以使用以下类提供的方法:

  • java.lang 包中的 String 类。
  • 来自 java.util 包的 Objects 类。
  • org.apache.commons.lang3 包中的 StringUtils 类。

大多数这些 Java 比较字符串的方法有忽略大小写的解决方案。在本教程中,您将学习可用于比较两个字符串的不同方法。

方法一:String equals() 方法

Java 串 equals() 方法 比较两个字符串对象是否具有相同的字符串值。

语法:

public boolean equals(Object anObject)

equals() 方法参数:

anObject – 用于比较字符串的参数字符串。

equals() 方法返回类型

  • 如果提供的字符串文字与第一个字符串相同,则返回 true。
  • 如果第一个字符串与参数字符串不同,则返回 false。

计费示例:

public class CompareTwoStrings {
 public static void main(String[] args) {
   String stringOne = "Guru99";
   String stringTwo = "Guru99";
   System.out.println("is Guru99 equal to Guru99: "+stringOne.equals(stringTwo));
   String stringThree = "GURU99";
   System.out.println("is Guru99 equal to GURU99: "+stringOne.equals(stringThree));
  }
}

预期产量:

is Guru99 equal to Guru99: true
is Guru99 equal to GURU99: false

说明:

  • 由于指定的对象具有不同的大小写,因此最后的输出结果为 false。

注意: 使用字符串的 equals() 方法可以区分大小写地比较字符串。使用“equalsIgnoreCase” 方法可以忽略大小写地比较字符串对象。

方法2:对象equals()方法

Java 对象 equals() 方法比较两个字符串对象以查看它们是否具有相同的值。

语法:

public static boolean equals(Object a, Object b)

equals() 方法参数

a – 第一个字符串对象的参数字符串。

b – 第二个字符串对象的参数字符串。

equals() 方法返回类型

  • 如果字符串文字相等,则返回 true。在两个参数中传递空值也将返回 true。
  • 如果字符串文字不相等,则返回 false。

计费示例:

import java.util.Objects;
public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 equal to Guru99: " + Objects.equals(stringOne, stringTwo));
        String stringThree = null;
        String stringFour = null;
        System.out.println("is Guru99 equal to Guru99: " + Objects.equals(stringThree, stringFour));
    }
}

输出:

is Guru99 equal to Guru99: true
is Guru99 equal to Guru99: true

说明:

从这个例子中可以看出,输出结果为布尔值 true,因为比较的字符串相等。

方法3:String compareTo()方法

Java 字符串比较() 方法按字母顺序比较两个字符串。通常称为字典顺序。

语法:

public int compareTo(String str)

compareTo() 方法参数

str – 与当前字符串进行比较的字符串。

compareTo() 方法返回

  • 0 – 如果指定对象等于当前字符串则返回零。
  • < 0 – 如果此字符串小于指定对象,则返回小于零的数字。
  • > 0 – 如果此字符串超出提供的字符串,则返回大于零的数字。

计费示例:

public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 equal to Guru99: " + stringOne.compareTo(stringTwo));
        String stringThree = "GURU99";
		// u = 117, U = 85, result = 117-85 = 32
        System.out.println("is Guru99 equal to GURU99: " + stringOne.compareTo(stringThree));
    }
}

预期产量:

is Guru99 equal to Guru99: 0
is Guru99 equal to GURU99: 32

说明:

第一个结果返回零值,因为第一个字符串和第二个字符串相等。

第二个结果返回值为 32,因为字符不同。

注意: 要忽略大小写,可以使用“compareToIgnoreCase”方法。

方法 4:StringUtils equals() 方法

Java StringUtils 相等() 方法比较两个字符序列是否相等。

请确保已在程序中添加“org.apache.commons.lang3”库。这将允许您使用StringUtils方法比较字符串。

对于 Maven 项目,请使用此 指南 将库添加到项目中。

但是,如果您想在不使用任何构建工具的情况下添加库,请使用以下方法。 指南.

语法:

public static boolean equals(CharSequence cs1, CharSequence cs2)

StringUtils equals() 方法参数

  • cs1 – 第一个参数的字符序列。
  • cs2 – 第二个参数的字符序列。

StringUtils equals() 方法返回

  • 如果字符串比较结果相等,则返回 true。即使两个参数都为 null,此规则也适用。
  • 如果字符串比较不相等,则返回 false。

计费示例:

import org.apache.commons.lang3.StringUtils;
public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 equal to Guru99: " + StringUtils.equals(stringOne, stringTwo));
        String stringThree = "GURU99";
        System.out.println("is Guru99 equal to GURU99: " + StringUtils.equals(stringOne, stringThree));
    }
}

输出:

is Guru99 equal to Guru99: true
is Guru99 equal to GURU99: false

说明:

由于第一个和第二个字符串的内容相等,所以结果返回 true。

您可以使用“equalsIgnoreCase”方法来忽略大小写。

方法 5:StringUtils equalsAny() 方法

Java StringUtils equalsAny() 方法检查参数中是否存在字符串。

语法:

public static boolean equalsAny(CharSequence string, CharSequence... searchStrings)

StringUtils equalsAny() 方法参数

  • string – 第一个参数的字符串值。该参数也可以具有空值。
  • searchStrings – 一组字符串参数,用于查找第一个参数字符串是否存在。

StringUtils equalsAny() 方法返回

  • 如果要匹配的字符串存在于指定数量的搜索字符串中,则返回 true。即使两个参数都为 null,此规则也适用。
  • 如果要匹配的字符串与可变数量的搜索字符串中的任何字符串都不匹配,则返回 false。

计费示例:

import org.apache.commons.lang3.StringUtils;
public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String[] stringTwo = new String[] {
            "Guru99",
            "JavaGuru99"
        };
        System.out.println("is Guru99 available: " +
            StringUtils.equalsAny(stringOne, stringTwo));
        String[] stringThree = new String[] {
            "GURU99",
            "JavaGuru99"
        };
        System.out.println("is GURU99 available: " +
            StringUtils.equalsAny(stringOne, stringThree));
    }
}

输出:

is Guru99 available: true
is GURU99 available: false

说明:

由于第一个字符串和第二个字符串的内容相等,因此结果返回 true。您可以使用“equalsAnyIgnoreCase”方法来忽略大小写。

方法 6:使用 == 运算符

字符串上的 == 运算符检查对象引用是否具有相同的地址。

计费示例:

public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 == to Guru99: " + (stringOne == stringTwo));
        String stringThree = "GURU99";
        System.out.println("is Guru99 == to GURU99: " + (stringOne == stringThree));
    }
}

预期产量:

is Guru99 == to Guru99: true
is Guru99 == to GURU99: false

说明:

  • 第一个结果返回布尔值 true。内容相同的字符串会被添加到同一个字符串池中,因此这些字符串共享一个地址。
  • 第二个结果返回布尔值 false。这些对象的内容不同,因此对应的字符串池也不同。这意味着这些字符串拥有不同的对象引用;因此​​输出为 false。

方法 7:创建自定义方法来比较两个字符串 Java

创建一种使用字典顺序比较两个字符串的方法。

语法:

public static int compareTwoStrings(String str1, String str2)

自定义方法参数

  • str1——要比较的字符串。
  • str2 – 要比较的字符串。

自定义方法返回

  • 0 – 如果第一个字符串等于第二个字符串,则返回零。
  • < 0 – 如果第一个字符串小于第二个字符串,则返回小于零的数字。
  • > 0 – 如果第一个字符串大于第二个字符串,则返回大于零的数字。

计费示例:

public class CompareTwoStrings {
    public static int compareTwoStrings(String stringOne, String stringTwo) {
        int lengthOfStringOne = stringOne.length();
        int lengthOfStringTwo = stringTwo.length();
        int minStringLength = Math.min(lengthOfStringOne, lengthOfStringTwo);
        for (int i = 0; i < minStringLength; i++) {
            char stringOneCharValue = stringOne.charAt(i);
            char stringTwoCharValue = stringTwo.charAt(i);
            if (stringOneCharValue != stringTwoCharValue) {
                return stringOneCharValue - stringTwoCharValue;
            }
        }
        if (lengthOfStringOne != lengthOfStringTwo) {
            return lengthOfStringOne - lengthOfStringTwo;
        } else {
            return 0;
        }
    }
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 equal to Guru99: " + compareTwoStrings(stringOne, stringTwo));
    }
}

预期产量:

is Guru99 equal to Guru99: 0

说明:

结果返回值为零,这意味着自定义函数按预期工作。

常见问题

是的。AI 助手可以根据你的目标推荐 equals、compareTo 或 StringUtils 函数,并指出常见的 == 错误。不过,你仍然需要针对你的具体数据进行测试来确认选择。

是的。AI 工具可以检测出是否错误地使用 == 来进行内容比较,并建议使用 equals 或 equalsIgnoreCase。这有助于减少初学者在处理字符串时常犯的细微的等号错误。

`==` 运算符比较的是对象引用,而不是内容。两个值相同的字符串可能具有不同的引用,因此 `==` 可能返回 false。要进行可靠的值比较,请使用 `equals()` 函数。

equals() 方法区分大小写,所以“Guru“99”和“GURU99”并不相等。equalsIgnoreCase() 方法在比较字符串时忽略大小写差异,因此对两者都返回 true。

总结一下这篇文章: