当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java String compareTo()用法及代码示例


Java String 类 compareTo() 方法按字典顺序将给定字符串与当前字符串进行比较。它返回一个正数、负数或 0。

它根据字符串中每个字符的 Unicode 值比较字符串。

如果第一个字符串按字典顺序大于第二个字符串,则返回一个正数(字符值的差异)。如果第一个字符串在字典上小于第二个字符串,则返回负数,如果第一个字符串在字典上等于第二个字符串,则返回 0。

if s1 > s2, it returns positive number
if s1 < s2, it returns negative number
if s1 == s2, it returns 0

用法

public int compareTo(String anotherString)

该方法接受一个 String 类型的参数,该参数将与当前字符串进行比较。

它返回一个整数值。它抛出以下两个异常:

ClassCastException:如果此对象无法与指定的对象进行比较。

NullPointerException:如果指定的对象为空。

内部实现

int compareTo(String anotherString) {
    int length1 = value.length;
    int length2 = anotherString.value.length;
    int limit = Math.min(length1, length2);
    char v1[] = value;
    char v2[] = anotherString.value;
 
    int i = 0;
    while (i < limit) {
        char ch1 = v1[i];
        char ch2 = v2[i];
        if (ch1 != ch2) {
            return ch1 - ch2;
        }
        i++;
    }
    return length1 - length2;
}

Java 字符串 compareTo() 方法示例

文件名:CompareToExample.java

public class CompareToExample{
public static void main(String args[]){
String s1="hello";
String s2="hello";
String s3="meklo";
String s4="hemlo";
String s5="flag";
System.out.println(s1.compareTo(s2));//0 because both are equal
System.out.println(s1.compareTo(s3));//-5 because "h" is 5 times lower than "m"
System.out.println(s1.compareTo(s4));//-1 because "l" is 1 times lower than "m"
System.out.println(s1.compareTo(s5));//2 because "h" is 2 times greater than "f"
}}

输出:

0
-5
-1
2

Java 字符串 compareTo():空字符串

当我们比较第一个或第二个字符串为空的两个字符串时,该方法返回字符串的长度。所以,可能有两种情况:

  • 如果第一个字符串是空字符串,则该方法返回负数
  • 如果第二个字符串是空字符串,则该方法返回一个正数,即第一个字符串的长度。

文件名:CompareToExample2.java

public class CompareToExample2{
public static void main(String args[]){
String s1="hello";
String s2="";
String s3="me";
System.out.println(s1.compareTo(s2));
System.out.println(s2.compareTo(s3));
}}

输出:

5
-2

Java 字符串 compareTo():区分大小写

为了检查 compareTo() 方法是否考虑字符的大小写敏感,我们将在相同序列中包含相同字母的两个字符串之间进行比较。

假设一个字符串的字母为大写,第二个字符串的字母为小写。在比较这两个字符串时,如果结果为 0,则 compareTo() 方法不考虑字符的大小写敏感;否则,该方法会考虑字符的大小写敏感度。

文件名:CompareToExample3.java

public class CompareToExample3
{
// main method
public static void main(String argvs[])
{

// input string in uppercase
String st1 = new String("INDIA IS MY COUNTRY");

// input string in lowercase
String st2 = new String("india is my country");

System.out.println(st1.compareTo(st2));
}
}

输出:

-32

结论:通过查看输出很明显结果不等于零。因此,compareTo() 方法负责字符的大小写敏感。

Java 字符串 compareTo():ClassCastException

当比较不兼容类型的对象时,抛出 ClassCastException。在以下示例中,我们将 ArrayList (al) 的对象与字符串文字 ("Sehwag") 进行比较。

文件名:CompareToExample4.java

// import statement
import java.util.*;

class Players 
{
     
private String name;

// constructor of the class
public Players(String str)
{
name = str;
}
 
}

public class CompareToExample4
{
 
// main method
public static void main(String[] args) 
{
 
Players ronaldo = new Players("Ronaldo");
Players sachin = new Players("Sachin");
Players messi = new Players("Messi");
ArrayList<Players> al = new ArrayList<>();

al.add(ronaldo);
al.add(sachin);
al.add(messi);
 
// performing binary search on the list al
Collections.binarySearch(al, "Sehwag", null);
}
     
}

输出:

Exception in thread "main" java.lang.ClassCastException:class Players cannot be cast to class java.lang.Comparable

Java 字符串 compareTo():NullPointerException

当空对象调用 compareTo() 方法时抛出 NullPointerException。观察以下示例。

文件名:CompareToExample5.java

public class CompareToExample5
{
// main method
public static void main(String[] args) 
{
 
String str = null;

// null is invoking the compareTo method. Hence, the NullPointerException
// will be raised
int no =  str.compareTo("India is my country.");

System.out.println(no);
}
}

输出:

Exception in thread "main" java.lang.NullPointerException
	at CompareToExample5.main(CompareToExample5.java:9)




相关用法


注:本文由纯净天空筛选整理自 Java String compareTo()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。