按字典顺序比较两个可能为空的 Java 字符串
Compare two possibly null Java strings lexicographically
是否有 JDK 方法或 Comparator
可以比较两个字符串 A
和 B
字典顺序 当 A
或 B
(或两者,或两者都不是)可能是 null
?
我不太关心 null
值在排序中是排在第一位还是最后。
请注意,我不是在寻找 Objects#equals(Object a, Object b)
。我正在寻找具有以下原型的 JDK 方法:
public int compare(String a, String b) ...
或者,JDK class
public class StringComparatorWithNulls implements Comparator<String> {
@Override
public int compareTo(String a, String b) {
if (null == a) {
return null == b ? 0 : -1;
} else if (null == b) {
return 1;
} else {
return a.compareTo(b);
}
}
}
如果 JDK 中没有任何东西可以做到这一点,那么广泛使用的开源库中的东西也可以。
您可能正在寻找来自 common-lang3 的 StringUtils 或 ObjectUtils:
https://commons.apache.org/proper/commons-lang/
和public static boolean equals(CharSequence cs1,CharSequence cs2)
否则,如果要比较,与:
字符串 compareTo
正是这样做的,您可以为将调用此 compareTo
函数的字符串添加空检查,以便它处理 null
值 -
String s1 = "Hello";
String s2 = "bye";
System.out.println(s1.compareTo(s2));
>> -26
你的条件看起来像 -
if(s1 != null && s1.compareTo(s2) > 0)
该方法的return是一个int
,可以解释为:
- returns < 0 那么调用该方法的String是字典序的
first(在字典中排在第一位)
- returns == 0 那么两个字符串
在字典序上是等价的
- returns > 0 然后参数
传递给 compareTo 方法的是字典顺序优先的。
Guava provides the very useful Ordering
class (more info)。它具有流畅的界面,并且扩展了 Comparator
,因此您可以在任何需要使用 Comparator
.
的地方使用它
Comparator<String> nullSafeComparator = Ordering.<String>natural().nullsLast();
是否有 JDK 方法或 Comparator
可以比较两个字符串 A
和 B
字典顺序 当 A
或 B
(或两者,或两者都不是)可能是 null
?
我不太关心 null
值在排序中是排在第一位还是最后。
请注意,我不是在寻找 Objects#equals(Object a, Object b)
。我正在寻找具有以下原型的 JDK 方法:
public int compare(String a, String b) ...
或者,JDK class
public class StringComparatorWithNulls implements Comparator<String> {
@Override
public int compareTo(String a, String b) {
if (null == a) {
return null == b ? 0 : -1;
} else if (null == b) {
return 1;
} else {
return a.compareTo(b);
}
}
}
如果 JDK 中没有任何东西可以做到这一点,那么广泛使用的开源库中的东西也可以。
您可能正在寻找来自 common-lang3 的 StringUtils 或 ObjectUtils:
https://commons.apache.org/proper/commons-lang/
和public static boolean equals(CharSequence cs1,CharSequence cs2)
否则,如果要比较,与:
字符串 compareTo
正是这样做的,您可以为将调用此 compareTo
函数的字符串添加空检查,以便它处理 null
值 -
String s1 = "Hello";
String s2 = "bye";
System.out.println(s1.compareTo(s2));
>> -26
你的条件看起来像 -
if(s1 != null && s1.compareTo(s2) > 0)
该方法的return是一个int
,可以解释为:
- returns < 0 那么调用该方法的String是字典序的 first(在字典中排在第一位)
- returns == 0 那么两个字符串 在字典序上是等价的
- returns > 0 然后参数 传递给 compareTo 方法的是字典顺序优先的。
Guava provides the very useful Ordering
class (more info)。它具有流畅的界面,并且扩展了 Comparator
,因此您可以在任何需要使用 Comparator
.
Comparator<String> nullSafeComparator = Ordering.<String>natural().nullsLast();