when comparing strings I prefer not to rely on instance methods lest the string on which the method is called happens to be null. In .NET I just use the static String.Compare(string, string, bool) method. does java provide a similar built-in "null-safe" string compare utility or do I have to implement my own?
7 回答
不,JDK 不包含此类实用程序。但是有几个外部库可以做到这一点。例如org.apache.commons.lang.StringUtils
提供 null-safeequals(String, String)
和equalsIgnoreCase(String, String)
. Guava 也有类似的实用程序。
String确实提供了一个compareTo 方法,它无论如何都不是 null 安全的(即,在实际调用对象上的 comapreTo 方法之前,您需要检查 null 值)。
您可以做的是像这样编写自己的比较器
class StringComparator implements Comparator<String> {
public int compare(String s1, String s2) {
if (s1 != null) {
return s1.compareTo(s2);
} else {
if (s2 == null) {
return 0;
} else {
return -1;
}
}
要验证该属性,只需执行以下操作:
Comparator<String> comp = new Comparator<String>();
System.out.println(comp.compare(s1, s2);
我实际上并没有测试代码,因此将其作为一般示例。好处是,即使您无论如何都需要检查空值,您也可以编写一次并多次使用它。
您还可以查看String 类中的内置 Comparator 。
没有。Apache Commons这样StringUtils.equals()
做:
public static boolean equals(String str1, String str2) {
return str1 == null ? str2 == null : str1.equals(str2);
}
如果要比较的字符串之一是一个常量,则可以equals
在它处理时使用null
。
if("string".equals(mystring)) {
// do something
}
如果您有 2 个变量,那么您可以编写自己的静态方法:
public static boolean stringEquals(String s1, String s2) {
if (s1 == null) {
return s2 == null;
}
return s1.equals(s2);
}
这里有一个类似的问题 如何简化空安全的 compareTo() 实现?
明智地建议使用 Apache CommonsObjectUtils
类
result = ObjectUtils.compare(left, right);
我想答案是否定的,您可能必须先检查一下
if(myString != null && myString.equals("string")) {
// do something
}
正如其他人指出的 Apache Commons 有这个,还有 Spring:
if(StringUtils.hasLength(myString)) {
// do something
}
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#compareTo(java.lang.String)
有一个返回 int 的比较。还有返回布尔值的equals。如果您有一个字符串实例,它应该能够执行。如果你通过 instance.equals(null) 它将返回 false。如果您的实例为空,那么您将获得一个空指针。
public class App
{
public static void main( String[] args )
{
String myString = "test";
if(myString.equals(null))
{
System.out.println("Its NUll");
}else
{
System.out.println("Not Equal");
}
}
}