比较Java中的两个字符串
字符串是一个字符序列。在Java中, String 的对象是不可变的,这意味着它们是常量,一旦创建就不能更改。
以下是在Java中比较两个字符串的 5 种方法:
- 使用用户定义的函数:定义一个函数来比较具有以下条件的值:
- if (string1 > string2) 它返回一个正值。
- 如果两个字符串在字典上是相等的
即(string1 == string2)它返回0 。 - 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
- 使用 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
- 使用 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
- 使用 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
- 使用 String.compareTo() :
句法:
int str1.compareTo(String str2)
在职的:
它比较并返回以下值,如下所示:- if (string1 > string2) 它返回一个正值。
- 如果两个字符串在字典上是相等的
即(string1 == string2)它返回0 。 - 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 中给出的值。