2011-03-01 25 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. 
}