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