📜  比较Java中的两个字符串

📅  最后修改于: 2022-05-13 01:55:10.836000             🧑  作者: Mango

比较Java中的两个字符串

字符串是一个字符序列。在Java中, String 的对象是不可变的,这意味着它们是常量,一旦创建就不能更改。

以下是在Java中比较两个字符串的 5 种方法:

  1. 使用用户定义的函数:定义一个函数来比较具有以下条件的值:
    1. if (string1 > string2) 它返回一个正值
    2. 如果两个字符串在字典上是相等的
      即(string1 == string2)它返回0
    3. if (string1 < string2) 它返回一个负值

    该值计算为(int)str1.charAt(i) – (int)str2.charAt(i)

    例子:

    Input 1: GeeksforGeeks
    Input 2: Practice
    Output: -9
    
    Input 1: Geeks
    Input 2: Geeks
    Output: 0
    
    Input 1: GeeksforGeeks
    Input 2: Geeks
    Output: 8
    

    程序:

    // Java program to Compare two strings
    // lexicographically
    public class GFG {
      
        // This method compares two strings
        // lexicographically without using
        // library functions
        public static int stringCompare(String str1, String str2)
        {
      
            int l1 = str1.length();
            int l2 = str2.length();
            int lmin = Math.min(l1, l2);
      
            for (int i = 0; i < lmin; i++) {
                int str1_ch = (int)str1.charAt(i);
                int str2_ch = (int)str2.charAt(i);
      
                if (str1_ch != str2_ch) {
                    return str1_ch - str2_ch;
                }
            }
      
            // Edge case for strings like
            // String 1="Geeks" and String 2="Geeksforgeeks"
            if (l1 != l2) {
                return l1 - l2;
            }
      
            // If none of the above conditions is true,
            // it implies both the strings are equal
            else {
                return 0;
            }
        }
      
        // Driver function to test the above program
        public static void main(String args[])
        {
            String string1 = new String("Geeksforgeeks");
            String string2 = new String("Practice");
            String string3 = new String("Geeks");
            String string4 = new String("Geeks");
      
            // Comparing for String 1 < String 2
            System.out.println("Comparing " + string1 + " and " + string2
                               + " : " + stringCompare(string1, string2));
      
            // Comparing for String 3 = String 4
            System.out.println("Comparing " + string3 + " and " + string4
                               + " : " + stringCompare(string3, string4));
      
            // Comparing for String 1 > String 4
            System.out.println("Comparing " + string1 + " and " + string4
                               + " : " + stringCompare(string1, string4));
        }
    }
    
    输出:
    Comparing Geeksforgeeks and Practice : -9
    Comparing Geeks and Geeks : 0
    Comparing Geeksforgeeks and Geeks : 8
    
  2. 使用 String.equals() :在Java中,字符串equals() 方法根据字符串的数据/内容比较两个给定的字符串。如果两个字符串的所有内容都相同,则返回 true。如果任何字符不匹配,则返回 false。

    句法:

    str1.equals(str2);

    这里 str1 和 str2 都是要比较的字符串。

    例子:

    Input 1: GeeksforGeeks
    Input 2: Practice
    Output: false
    
    Input 1: Geeks
    Input 2: Geeks
    Output: true
    
    Input 1: geeks
    Input 2: Geeks
    Output: false
    

    程序:

    // Java program to Compare two strings
    // lexicographically
    public class GFG {
        public static void main(String args[])
        {
            String string1 = new String("Geeksforgeeks");
            String string2 = new String("Practice");
            String string3 = new String("Geeks");
            String string4 = new String("Geeks");
            String string5 = new String("geeks");
      
            // Comparing for String 1 != String 2
            System.out.println("Comparing " + string1 + " and " + string2
                               + " : " + string1.equals(string2));
      
            // Comparing for String 3 = String 4
            System.out.println("Comparing " + string3 + " and " + string4
                               + " : " + string3.equals(string4));
      
            // Comparing for String 4 != String 5
            System.out.println("Comparing " + string4 + " and " + string5
                               + " : " + string4.equals(string5));
      
            // Comparing for String 1 != String 4
            System.out.println("Comparing " + string1 + " and " + string4
                               + " : " + string1.equals(string4));
        }
    }
    
    输出:
    Comparing Geeksforgeeks and Practice : false
    Comparing Geeks and Geeks : true
    Comparing Geeks and geeks : false
    Comparing Geeksforgeeks and Geeks : false
    
  3. 使用 String.equalsIgnoreCase() : String.equalsIgnoreCase() 方法比较两个字符串,而不考虑字符串的大小写(小写或大写)。如果参数不为 null 并且两个字符串的内容相同,则此方法返回 true,忽略大小写,否则返回 false。

    句法:

    str2.equalsIgnoreCase(str1);

    这里 str1 和 str2 都是要比较的字符串。

    例子:

    Input 1: GeeksforGeeks
    Input 2: Practice
    Output: false
    
    Input 1: Geeks
    Input 2: Geeks
    Output: true
    
    Input 1: geeks
    Input 2: Geeks
    Output: true
    

    程序:

    // Java program to Compare two strings
    // lexicographically
    public class GFG {
        public static void main(String args[])
        {
            String string1 = new String("Geeksforgeeks");
            String string2 = new String("Practice");
            String string3 = new String("Geeks");
            String string4 = new String("Geeks");
            String string5 = new String("geeks");
      
            // Comparing for String 1 != String 2
            System.out.println("Comparing " + string1 + " and " + string2
                               + " : " + string1.equalsIgnoreCase(string2));
      
            // Comparing for String 3 = String 4
            System.out.println("Comparing " + string3 + " and " + string4
                               + " : " + string3.equalsIgnoreCase(string4));
      
            // Comparing for String 4 = String 5
            System.out.println("Comparing " + string4 + " and " + string5
                               + " : " + string4.equalsIgnoreCase(string5));
      
            // Comparing for String 1 != String 4
            System.out.println("Comparing " + string1 + " and " + string4
                               + " : " + string1.equalsIgnoreCase(string4));
        }
    }
    
    输出:
    Comparing Geeksforgeeks and Practice : false
    Comparing Geeks and Geeks : true
    Comparing Geeks and geeks : true
    Comparing Geeksforgeeks and Geeks : false
    
  4. 使用 Objects.equals() :如果参数彼此相等,则 Object.equals(Object a, Object b) 方法返回 true,否则返回 false。因此,如果两个参数都为 null,则返回 true,如果恰好一个参数为 null,则返回 false。否则,相等性由使用第一个参数的 equals() 方法确定。

    句法:

    public static boolean equals(Object a, Object b)

    这里 a 和 b 都是要比较的字符串对象。

    例子:

    Input 1: GeeksforGeeks
    Input 2: Practice
    Output: false
    
    Input 1: Geeks
    Input 2: Geeks
    Output: true
    
    Input 1: null
    Input 2: null
    Output: true
    

    程序:

    // Java program to Compare two strings
    // lexicographically
      
    import java.util.*;
      
    public class GFG {
        public static void main(String args[])
        {
            String string1 = new String("Geeksforgeeks");
            String string2 = new String("Geeks");
            String string3 = new String("Geeks");
            String string4 = null;
            String string5 = null;
      
            // Comparing for String 1 != String 2
            System.out.println("Comparing " + string1 + " and " + string2
                               + " : " + Objects.equals(string1, string2));
      
            // Comparing for String 2 = String 3
            System.out.println("Comparing " + string2 + " and " + string3
                               + " : " + Objects.equals(string2, string3));
      
            // Comparing for String 1 != String 4
            System.out.println("Comparing " + string1 + " and " + string4
                               + " : " + Objects.equals(string1, string4));
      
            // Comparing for String 4 = String 5
            System.out.println("Comparing " + string4 + " and " + string5
                               + " : " + Objects.equals(string4, string5));
        }
    }
    
    输出:
    Comparing Geeksforgeeks and Geeks : false
    Comparing Geeks and Geeks : true
    Comparing Geeksforgeeks and null : false
    Comparing null and null : true
    
  5. 使用 String.compareTo() :

    句法:

    int str1.compareTo(String str2)

    在职的:
    它比较并返回以下值,如下所示:

    1. if (string1 > string2) 它返回一个正值
    2. 如果两个字符串在字典上是相等的
      即(string1 == string2)它返回0
    3. if (string1 < string2) 它返回一个负值

    例子:

    Input 1: GeeksforGeeks
    Input 2: Practice
    Output: -9
    
    Input 1: Geeks
    Input 2: Geeks
    Output: 0
    
    Input 1: GeeksforGeeks
    Input 2: Geeks
    Output: 8
    

    程序:

    // Java program to Compare two strings
    // lexicographically
      
    import java.util.*;
      
    public class GFG {
        public static void main(String args[])
        {
            String string1 = new String("Geeksforgeeks");
            String string2 = new String("Practice");
            String string3 = new String("Geeks");
            String string4 = new String("Geeks");
      
            // Comparing for String 1 < String 2
            System.out.println("Comparing " + string1 + " and " + string2
                               + " : " + string1.compareTo(string2));
      
            // Comparing for String 3 = String 4
            System.out.println("Comparing " + string3 + " and " + string4
                               + " : " + string3.compareTo(string4));
      
            // Comparing for String 1 > String 4
            System.out.println("Comparing " + string1 + " and " + string4
                               + " : " + string1.compareTo(string4));
        }
    }
    
    输出:
    Comparing Geeksforgeeks and Practice : -9
    Comparing Geeks and Geeks : 0
    Comparing Geeksforgeeks and Geeks : 8
    

为什么不使用 == 比较字符串?

通常, Java中的equals()和“ == ”运算符都用于比较对象以检查相等性,但以下是两者之间的一些区别:

  • .equals() 方法和 ==运算符之间的主要区别在于,一个是方法,另一个是运算符。
  • 可以使用 ==运算符进行引用比较(地址比较)和 .equals() 方法进行内容比较

    简单来说, == 检查两个对象是否指向相同的内存位置,而 .equals() 评估对象中值的比较。

    例子:

    // Java program to understand
    // why to avoid == operator
      
    public class Test {
        public static void main(String[] args)
        {
            String s1 = new String("HELLO");
            String s2 = new String("HELLO");
      
            System.out.println(s1 == s2);
      
            System.out.println(s1.equals(s2));
        }
    }
    
    输出:
    false
    true
    

    说明:这里创建了两个 String 对象,即 s1 和 s2。

    • s1 和 s2 都指不同的对象。
    • 当使用 ==运算符进行 s1 和 s2 比较时,结果为假,因为两者在内存中的地址不同。
    • 使用 equals,结果为真,因为它只比较 s1 和 s2 中给出的值。