有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是否提供内置的静态字符串。比较方法?

在比较字符串时,我不喜欢依赖实例方法,以免调用该方法的字符串恰好为空。在里面NET我只使用静态字符串。比较(string,string,bool)方法。java是否提供了类似的内置“空安全”字符串比较实用程序,还是我必须实现自己的


共 (6) 个答案

  1. # 1 楼答案

    如果要比较的字符串之一是常量,则可以在处理null时使用equals

    if("string".equals(mystring)) {
        // do something
    }
    

    如果有两个变量,则可以编写自己的静态方法:

    public static boolean stringEquals(String s1, String s2) {
        if (s1 == null) {
            return s2 == null;
        }
        return s1.equals(s2);
    }
    
  2. # 2 楼答案

    没有。Apache Commons^{}是这样做的:

    public static boolean equals(String str1, String str2) {
        return str1 == null ? str2 == null : str1.equals(str2);
    }
    
  3. # 3 楼答案

    不,JDK不包含这样的实用程序。然而,有几个外部库可以做到这一点。例如org.apache.commons.lang.StringUtils提供空安全equals(String, String)equalsIgnoreCase(String, String)。番石榴也有类似的用途

  4. # 4 楼答案

    String确实提供了一个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);
    

    我并没有真正测试代码,所以把它作为一个通用的例子。 这样做的好处是,即使您无论如何都需要检查null值,也可以编写一次并多次使用它

    您还可以查看String类中的a built in Comparator

  5. # 5 楼答案

    我猜答案是否定的,你可能需要在之前检查一下

    if(myString != null && myString.equals("string")) {
        // do something
    }
    

    Here some more examples

    正如其他人指出的那样,Apache Commons和Spring都有这样的功能:

    StringUtils.hasLength()

    if(StringUtils.hasLength(myString)) {
        // do something
    }