在比较字符串时,我宁愿不依赖实例方法,以免调用该方法的字符串为null。在.NET中,我只使用静态String.Compare(string,string,bool)方法。 java提供了类似的内置“null-safe”字符串比较实用程序,还是我必须实现自己的?
答案 0 :(得分:9)
不,JDK不包含此类实用程序。但是有几个外部库可以做到这一点。例如,org.apache.commons.lang.StringUtils
提供了空安全equals(String, String)
和equalsIgnoreCase(String, String)
。番石榴也有类似的用途。
答案 1 :(得分:2)
没有。 Apache Commons'StringUtils.equals()
这样做:
public static boolean equals(String str1, String str2) {
return str1 == null ? str2 == null : str1.equals(str2);
}
答案 2 :(得分:2)
字符串确实提供compareTo method,这无论如何都不是空安全的(即在实际调用对象上的comapreTo方法之前需要检查空值)。
你能做的就是像这样编写自己的比较器
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类中的a built in Comparator。
答案 3 :(得分:1)
我猜答案是否定的,你可能要在
之前检查一下if(myString != null && myString.equals("string")) {
// do something
}
正如其他人指出Apache Commons有这个,还有Spring:
if(StringUtils.hasLength(myString)) {
// do something
}
答案 4 :(得分:1)
如果要比较的其中一个字符串是常量,则可以使用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);
}
答案 5 :(得分:1)
这里有一个类似的问题 How to simplify a null-safe compareTo() implementation?
sagely建议使用Apache Commons ObjectUtils
类
result = ObjectUtils.compare(left, right);
答案 6 :(得分:-2)
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#compareTo(java.lang.String)
有比较返回int。也有平等的 返回一个布尔值。如果你有一个字符串实例,它应该能够 执行。如果传递instance.equals(null),它将返回false。如果你的 如果为null,则会得到一个空指针。
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");
}
}
}