現在我算不算會了String的compareTo方法


public int compareTo(String anotherString)
文檔描述:
按字典順序比較兩個字符串。該比較基於字符串中各個字符的 Unicode 值。按字典順序將此 String 對象表示的字符序列與參數字符串所表示的字符序列進行比較。如果按字典順序此 String 對象位於參數字符串之前,則比較結果爲一個負整數。如果按字典順序此 String 對象位於參數字符串之後,則比較結果爲一個正整數。如果這兩個字符串相等,則結果爲 0;compareTo 只在方法 equals(Object) 返回 true 時才返回 0。
這是字典排序的定義。如果這兩個字符串不同,那麼它們要麼在某個索引處的字符不同(該索引對二者均爲有效索引),要麼長度不同,或者同時具備這兩種情況。如果它們在一個或多個索引位置上的字符不同,假設 k 是這類索引的最小值;則在位置 k 上具有較小值的那個字符串(使用 < 運算符確定),其字典順序在其他字符串之前。在這種情況下,compareTo 返回這兩個字符串在位置 k 處兩個char 值的差,即值:

this.charAt(k)-anotherString.charAt(k)

如果沒有字符不同的索引位置,則較短字符串的字典順序在較長字符串之前。在這種情況下,compareTo 返回這兩個字符串長度的差,即值:
this.length()-anotherString.length()

是這麼回事:
當前String對象與anotherString比較,相等關係返回0;不相等時,從兩個字符串第0個字符開始比較,返回第一個不想等的字符差,即this.charAt(k)-anotherString.charAt(k);另一種情況較長字符串的前面部分恰巧是較短字符串,返回它們的長度差,即this.length()-anotherString.length()。

模仿C語言中的strcompare方法:

public static void main(String[] args)
{
String str1="abc";
String str2="abccc";
System.out.println(Zzz.strCompare(str1, str2));
}
public static int strCompare(String str1,String str2)
{
char[] cs1=str1.toCharArray();
char[] cs2=str2.toCharArray();
int length=Math.min(cs1.length, cs2.length);
for(int i=0;i<length;i++)
{
int result=cs1[i]-cs2[i];
if(result<0)
{
return 1;
}
if(result>0)
{
return -1;
}
}
if(cs1.length!=cs2.length)
{
int result=cs1.length-cs2.length;
if(result>0)
{
return -1;
}
if(result<0)
{
return 1;
}
}
return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章