如何在 Java 中比较两个字符串

Java 中比较字符串的方法

Java 提供了多种方法供您在 Java 中比较两个字符串。Java 中的字符串比较是一项功能,用于将字符序列与字符串进行匹配。

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

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

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

方法 1:String equals() 方法

Java String 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。

注意:使用 string equals 方法进行区分大小写的字符串比较。使用“equalsIgnoreCase”方法来比较具有不同字符串值的字符串对象。

方法 2:Objects equals() 方法

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

语法

public static boolean equals(Object a, Object b)

equals() 方法参数

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

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

equals() 方法返回值

  • 如果字符串文字相等,则返回 true。将 null 值传递给两个参数也将返回 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 String compareTo() 方法按字母顺序比较两个字符串。它通常称为字典序。

语法

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 equals() 方法比较两个字符序列的相等性。

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

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

但是,如果您想在没有任何构建工具的情况下添加库,请使用此指南

语法

public static boolean equals(CharSequnce 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 – 第一个参数的字符串值。该参数也可以为 null。
  • 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

解释

返回的结果值为零,表示自定义函数按预期工作。

摘要

Java 中用于比较两个字符串的方法取决于以下因素。

  • 希望控制自己的方法。在这种情况下,请创建自定义方法。
  • 无法使用旧版代码。对于 Java 6 及更低版本。
  • 性能最佳的方法。
  • 您正在处理的数据类型。例如,匹配可变参数集中的字符串。
  • 外来库提供的功能。例如,StringUtils 库提供了各种方法来比较字符串。