Java中字符串的比较可以用字符串的compareTo方法,很简单。找工作面试的时候遇到个面试官要我实现这个方法。于是就写了一段程序,当时写的和下面的差不多,很久了,记不清了。可能是我写的比较快,自己有点得意了,也可能那家伙比较爱挑毛病,愣是说我的compare方法没有对s1和s2变量进行null值检查。当时被他一说觉得真是这样的,自己疏忽了,只好承认错误。昨天看了一下String中的compareTo方法的实现,发现对传入的值也没有进行null值检查。转念一想,明白了,如果传入值为null,程序自然会抛出NullPointerException。如果要进行null值检查,如果检查到传入值为空,那该怎么处理呢?最终不还是抛出个NullPointerException,既然结局是一样的,还检查作甚。
更有趣的是那家伙还继续挑我毛病,看到return s1.charAt(i) – s2.charAt(i);这句,就说这能用运算符相减?不知道这家伙是真不懂还是假不懂,于是就解释了一番。这年头,面试真辛苦。。
[java]public class StringCompare {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abcde";
String s3 = "abf";
String s4 = "aa";
String s5 = "abc";
String s6 = "123";
System.out.println(compare(s1, s2));
System.out.println(compare(s1, s3));
System.out.println(compare(s1, s4));
System.out.println(compare(s1, s5));
System.out.println(compare(s1, s6));
}
public static int compare(String s1, String s2){
int len1 = s1.length();
int len2 = s2.length();
int minLen = len1 < len2 ? len1 : len2;
for(int i = 0; i < minLen; i++){
if(s1.charAt(i) != s2.charAt(i)){
return s1.charAt(i) – s2.charAt(i);
}
}
if(len1 != len2){
return len1 – len2;
}
return 0;
}
}[/java]
输出:
-2
-3
1
0
48