HOWTO · Java
在 Java 中按字母順序比較字串
本文闡明瞭在 Java 中按字母順序比較字串。
本頁內容
在 Java 中有多種方法可以比較兩個或多個字串,但如果你想按字典順序(按字母順序)比較字串,請參閱這篇文章。字典順序遵循字典中的單詞排列。下面的示例展示了在 Java 中按字母順序比較字串的兩種方法。
使用 compareTo() 按字母順序比較字串
在示例中,我們比較了幾個字串以檢視結果是否正確。compareTo() 方法帶有 String 類,因此我們可以用任何字串呼叫它來與另一個字串進行比較。下面我們將 s1 與 s2、s3 與 s4、s5 與 s6 等進行比較。
當我們使用 compareTo() 比較字串時,該方法返回一個 int 值,該值告訴我們字串應該放在之前或之後的位置,或者它們是否相等。例如,如果我們使用 s1.compare(s2) 將值為 apple 的 s1 與值為 orange 的 s2 進行比較,則 comparedResult 函式將得到一個負整數——這意味著 s1 值在 s2 之前。
如果 comparedResult 得到一個正整數,當 s3 與 s4 進行比較時,這意味著 s3 在 s4 之後,因為按字典順序,大寫字母在小寫字母之前。
如果 compareTo() 方法返回零,則表示兩個比較的字串相等,如 s9 和 s10。
class CompareStrings {
public static void main(String args[]) {
String s1 = "apple";
String s2 = "orange";
compareStrings(s1, s2);
String s3 = "apple";
String s4 = "Orange";
compareStrings(s3, s4);
String s5 = "sole";
String s6 = "soul";
compareStrings(s5, s6);
String s7 = "john";
String s8 = "johnson";
compareStrings(s7, s8);
String s9 = "one";
String s10 = "one";
compareStrings(s9, s10);
}
public static void compareStrings(String s1, String s2) {
int comparedResult = s1.compareTo(s2);
if (comparedResult > 0) {
System.out.println(s1 + " comes after " + s2);
} else if (comparedResult < 0) {
System.out.println(s1 + " comes before " + s2);
} else {
System.out.println(s1 + " is equal to " + s2);
}
}
}
輸出:
apple comes before orange
apple comes after Orange
sole comes before soul
john comes before johnson
one is equal to one
使用傳統方式按字母順序比較字串
在這個例子中,我們採用與前面的例子相同的輸出相同的字串,但方法不同。我們不使用任何類的方法,而是建立自己的方法。compareStrings() 是進行比較的方法。
在 compareStrings() 中,我們建立了一個迴圈,檢查直到字串 s1 和 s2 的結尾。在迴圈內部,我們首先使用 charAt() 獲取字串的字元並將其轉換為 int,這將返回一個 ASCII 值。我們對兩個字串都這樣做,然後比較 ASCII 值。如果所有 ASCII 值都相等,則意味著兩個字串也相等。
如果 ASCII 值不同,那麼我們使用 (int) s1.charAt(i) - (int) s2.charAt(i); 返回字串的 ASCII 值之間的差異。在迴圈之後,我們檢查字串的長度,然後返回它們之間的差異。
最後,獲取 compareStrings() 方法返回的 int 值並將其與字串一起傳遞給 getComparisonResult() 函式,該函式列印結果是字串應該在前面還是後面,或者它們是否是平等的。
class CompareStrings {
public static void main(String[] args) {
String s1 = "apple";
String s2 = "orange";
int getValue1 = compareStrings(s1, s2);
String s3 = "apple";
String s4 = "Orange";
int getValue2 = compareStrings(s3, s4);
String s5 = "sole";
String s6 = "soul";
int getValue3 = compareStrings(s5, s6);
String s7 = "john";
String s8 = "johnson";
int getValue4 = compareStrings(s7, s8);
String s9 = "one";
String s10 = "one";
int getValue5 = compareStrings(s9, s10);
getComparisonResult(getValue1, s1, s2);
getComparisonResult(getValue2, s3, s4);
getComparisonResult(getValue3, s5, s6);
getComparisonResult(getValue4, s7, s8);
getComparisonResult(getValue5, s9, s10);
}
public static int compareStrings(String s1, String s2) {
for (int i = 0; i < s1.length() && i < s2.length(); i++) {
if ((int) s1.charAt(i) == (int) s2.charAt(i)) {
continue;
} else {
return (int) s1.charAt(i) - (int) s2.charAt(i);
}
}
if (s1.length() < s2.length()) {
return (s1.length() - s2.length());
} else if (s1.length() > s2.length()) {
return (s1.length() - s2.length());
} else {
return 0;
}
}
private static void getComparisonResult(int value, String s1, String s2) {
if (value > 0) {
System.out.println(s1 + " comes after " + s2);
} else if (value < 0) {
System.out.println(s1 + " comes before " + s2);
} else {
System.out.println(s1 + " and " + s2 + " are equal");
}
}
}
輸出:
apple comes before orange
apple comes after Orange
sole comes before soul
john comes before johnson
one and one are equal