📜  比较Java中的两个字符串String

📅  最后修改于: 2020-03-27 07:43:29             🧑  作者: Mango

字符串是字符序列。在Java中,String对象是不可变的,这意味着它们是恒定的,一旦创建就不能更改。
下面是比较Java中两个字符串的5种方法:

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

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

    输入 1: GeeksforGeeks
    输入 2: Practice
    输出: -9
    输入 1: Geeks
    输入 2: Geeks
    输出: 0
    输入 1: GeeksforGeeks
    输入 2: Geeks
    输出: 8

    程序: 

    // Java按照字典方法比较两个字符串strings
    
    public class GFG {
        // 比较两个字符串,每调用库
        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;
                }
            }
            // 边界情况
            // 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;
            }
        }
        // 测试代码
        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("比较 " + string1 + " 和 " + string2
                               + " : " + stringCompare(string1, string2));
            // 比较String 3 = String 4
            System.out.println("比较 " + string3 + " 和 " + string4
                               + " : " + stringCompare(string3, string4));
            // 比较String 1 > String 4
            System.out.println("比较 " + string1 + " 和 " + string4
                               + " : " + stringCompare(string1, string4));
        }
    }

    输出: 

    比较 GeeksforGeeks 和 Practice : -9
    比较 Geeks 和 Geeks : 0
    比较 GeeksforGeeks 和 Geeks : 8 
  2. 使用String.equals():在Java中,字符串equals()方法根据字符串的数据/内容比较两个给定的字符串。如果两个字符串的所有内容都相同,则返回true。如果所有字符都不匹配,则返回false。
    语法:
    str1.equals(str2);

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

    输入 1: GeeksforGeeks
    输入 2: Practice
    输出: false
    输入 1: Geeks
    输入 2: Geeks
    输出: true
    输入 1: geeks
    输入 2: Geeks
    输出: false

    程序:

    // Java比较连个字符串
    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");
            // 比较 String 1 != String 2
            System.out.println("比较 " + string1 + " 和 " + string2
                               + " : " + string1.equals(string2));
            // 比较 String 3 = String 4
            System.out.println("比较 " + string3 + " 和 " + string4
                               + " : " + string3.equals(string4));
            // 比较 String 4 != String 5
            System.out.println("比较 " + string4 + " 和 " + string5
                               + " : " + string4.equals(string5));
            // 比较 String 1 != String 4
            System.out.println("比较 " + string1 + " 和 " + string4
                               + " : " + string1.equals(string4));
        }
    }

    输出:

    比较 GeeksforGeeks 和 Practice : false
    比较 Geeks 和 Geeks : true
    比较 Geeks 和 geeks : false
    比较 GeeksforGeeks 和 Geeks : false

     

  3. 使用String.equalsIgnoreCase():该String.equalsIgnoreCase()方法两个字符串无关比较字符串的情况下(下或上)的。如果参数不为null并且两个String的内容忽略大小写相同,则此方法返回true,否则返回false。
    语法:
    str2.equalsIgnoreCase(str1);

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

    输入 1: GeeksforGeeks
    输入 2: Practice
    输出: false
    输入 1: Geeks
    输入 2: Geeks
    输出: true
    输入 1: geeks
    输入 2: Geeks
    输出: true

    程序:

    // Java比较连个字符串
    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");
            // 比较 String 1 != String 2
            System.out.println("比较 " + string1 + " 和 " + string2
                               + " : " + string1.equalsIgnoreCase(string2));
            // 比较 String 3 = String 4
            System.out.println("比较 " + string3 + " 和 " + string4
                               + " : " + string3.equalsIgnoreCase(string4));
            // 比较 String 4 = String 5
            System.out.println("比较 " + string4 + " 和 " + string5
                               + " : " + string4.equalsIgnoreCase(string5));
            // 比较 String 1 != String 4
            System.out.println("比较 " + string1 + " 和 " + string4
                               + " : " + string1.equalsIgnoreCase(string4));
        }
    }

    输出:

    比较 GeeksforGeeks 和 Practice : false
    比较 GeeksGeeks : true
    比较 Geeks 和 geeks : true
    比较 GeeksforGeeks 和 Geeks : false

     

  4. 使用Objects.equals(): 如果两个参数彼此相等,则Object.equals(Object a,Object b)方法返回true,否则返回false。因此,如果两个参数都为null,则返回true;如果正好一个参数为null,则返回false。
    语法:
    public static boolean equals(Object a, Object b)

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

    输入 1: GeeksforGeeks
    输入 2: Practice
    输出: false
    输入 1: Geeks
    输入 2: Geeks
    输出: true
    输入 1: null
    输入 2: null
    输出: true

    程序:

    // Java展示比较两个字符
    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("比较 " + string1 + " 和 " + string2
                               + " : " + Objects.equals(string1, string2));
            // Comparing for String 2 = String 3
            System.out.println("比较 " + string2 + " 和 " + string3
                               + " : " + Objects.equals(string2, string3));
            // Comparing for String 1 != String 4
            System.out.println("比较 " + string1 + " 和 " + string4
                               + " : " + Objects.equals(string1, string4));
            // Comparing for String 4 = String 5
            System.out.println("比较 " + string4 + " 和 " + string5
                               + " : " + Objects.equals(string4, string5));
        }
    }

    输出:

    比较 GeeksforGeeks 和 Geeks : false
    比较 GeeksGeeks : true
    比较 GeeksforGeeks 和 null : false
    比较 null 和 null : true

     

  5. 使用String.compareTo():
    语法:
    int str1.compareTo(String str2)

    工作:
    它比较并返回以下值,如下所示:

    1. 如果(string1> string2)返回正值
    2. 如果两个字符串在字典上相等,
      即((string1 == string2),则返回0
    3. 如果(string1 负值。

    例子:

    输入 1: GeeksforGeeks
    输入 2: Practice
    输出: -9
    输入 1: Geeks
    输入 2: Geeks
    输出: 0
    输入 1: GeeksforGeeks
    输入 2: Geeks
    输出: 8

    程序:

    // Java比较两个字符串
    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("比较 " + string1 + " 和 " + string2
                               + " : " + string1.compareTo(string2));
            // Comparing for String 3 = String 4
            System.out.println("比较 " + string3 + " 和 " + string4
                               + " : " + string3.compareTo(string4));
            // Comparing for String 1 > String 4
            System.out.println("比较 " + string1 + " 和 " + string4
                               + " : " + string1.compareTo(string4));
        }
    }

    输出:

    比较 GeeksforGeeks 和 Practice : -9
    比较 GeeksGeeks : 0
    比较 GeeksforGeeks 和 Geeks : 8

     

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

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

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

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

// Java展示==和.equal()的区别
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,结果为true,因为它仅比较s1和s2中给出的值。