如何比较java中的两个字符串并按字母顺序定义哪个字符串小于另一个字符串?

syl*_*ter 64 java

我想使用二进制搜索算法来搜索用户在一个非常大的排序文件中输入的字符串.我无法将用户输入的字符串与位于文件中间行的字符串进行比较,以继续我的二进制搜索.

例如,如果用户的字符串是abcda,并且文件的字符串是abcza,则很明显用户的字符串小于文件的字符串.它是如何在java中实现的?如果您可以帮我提供示例代码,那将会很棒.

Joh*_*erg 121

您可以使用

str1.compareTo(str2);
Run Code Online (Sandbox Code Playgroud)

如果STR1是字典序小于str2的,a 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
"b".compareTo(null); // throws java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)

  • 没有.java.util.Comparable的合同说如果第一个小于第二个,它将返回一个负整数,如果更大则返回一个正整数.但不一定是-1和1. (13认同)
  • @sylvester,这是一个完全不同的问题.在使用您喜欢的方法进行比较之前,您需要清理字符串. (2认同)
  • @sylvester:String的compareTo方法只是比较各个字符的unicode值,因此`'''(= 60)小于''a'`(= 97).如上所述,如果你想将它们都排序为`abc`,你将不得不剥离标签和空格.而且您可能希望在结果上使用Collat​​or作为您的语言. (2认同)

Ale*_*cer 6

如果您想忽略大小写,可以使用以下内容:

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.
}
Run Code Online (Sandbox Code Playgroud)