2011-03-01 73 views
51

我想使用二進制搜索算法來搜索用戶在非常大的排序文件中輸入的字符串。我無法將用戶輸入的字符串與位於文件中間行的字符串進行比較,以繼續進行二分查找。如何比較java中的兩個字符串,並定義哪些字符串比其他字母小?

例如,如果用戶的字符串是abcda,並且該文件的字符串是abcza,則很明顯用戶的字符串比文件的字符串小。它在java中如何實現?如果你可以用示例代碼來幫助我,那將是非常棒的。

+3

您應指定,如果你需要這與英語(ASCII)字符串纔有效,或者如果輸入有可能是國際性的。在後一種情況下,確定哪個字符串在另一個字符串之前排序相當複雜。 – unwind 2011-03-01 11:02:09

回答

90

您可以使用

str1.compareTo(str2); 

如果STR1排在最後不到STR2a negative number將被退回,如果0等於或a positive number如果STR1更大。

例如,

"a".compareTo("b"); // returns a negative number, here -1 
"a".compareTo("a"); // returns 0 
"b".compareTo("a"); // returns a positive number, here 1 
+12

否。java.util.Comparable的合約說如果第一個小於第二個則返回一個負整數,如果大於則返回一個正整數。但不一定是-1和1. – 2011-03-01 11:03:14

+0

@JB是的,你說得對,謝謝你指出! – 2011-03-01 11:04:45

+0

謝謝。但是,如果第一個字符串是「 abc」,而第二個字符串是「abc」。我如何比較「<」和「a」? – sylvester 2011-03-01 11:06:18

3

你沒有聽說過有關Comparable接口由String正在實施?如果不是,請嘗試使用

"abcda".compareTo("abcza") 

而且它會爲您的問題的解決方案輸出一個很好的根。

5

如果你想忽略情況下,你可以使用如下:

String s = "yip"; 
String best = "yodel"; 
int compare = s.compareToIgnoreCase(best); 
if(compare < 0){ 
    //-1, --> s is less than best. (s comes alphabetically first) 
} 
else if(compare > 0){ 
// best comes alphabetically first. 
} 
else{ 
    // strings are equal. 
}