Java 比较两个字符串

Java 比较两个字符串

字符串是一连串的字符。在Java中,字符串的对象是不可变的,这意味着它们是恒定的,一旦创建就不能被改变。

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

  1. 使用用户定义的函数: 定义一个函数来比较具有以下条件的值。
    1. 如果(string1 > string2)它返回一个正值
    2. 如果两个字符串在词法上相等 即(string1 == string2)它返回0
    3. 如果(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
  1. 使用String.equals()。在Java中,string 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
  1. 使用String.equalsIgnoreCase(): String.equalsIgnoreCase()方法对两个字符串进行比较,不考虑字符串的大小写(小写或大写)。如果参数不是空的,并且两个字符串的内容大小写相同,该方法返回真,否则返回假。

语法:

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
  1. 使用Objects.equals(): Object.equals(Object a, Object b)方法如果参数彼此相等则返回true,否则返回false。因此,如果两个参数都是空的,返回true,如果正好有一个参数是空的,返回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
  1. 使用 String.compareTo() :

语法:

int str1.compareTo(String str2)

工作。

它比较并返回以下值,如下所示。

  1. 如果(string1 > string2)它返回一个正值
  2. 如果这两个字符串在词典上相等 即(string1 == string2),则返回0
    1. 如果(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

解释: 这里创建了两个字符串对象,即s1和s2。

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程