【问题标题】:Java Compare StringsJava比较字符串
【发布时间】:2011-07-18 09:28:11
【问题描述】:
 /**
 * A method to compare Strings
 * @param arg1
 * @param arg2
 * @return 
 */
public boolean myQuickCompare(String arg1, String arg2) {
    boolean a = arg1.length() == arg2.length();
    if (a) {
        for (int b = 0; b > arg1.length(); b++) {
            if (arg1.charAt(b) != arg2.charAt(b)) {
                a = false;
            }
        }
    }
    return a;
}

我知道 for 循环是错误的方法,b 永远不会大于字符串的长度。你将如何纠正这个问题?

你会为 a 和 b 给出什么合理的变量名?

【问题讨论】:

  • 为什么你会问这个?你真的要替换String.equals() 还是只是为了学习而实现它?

标签: java string coding-style compare


【解决方案1】:

使用arg1.equals(arg2)。 无需自定义功能。不要试图智取 Java 开发人员。大多数时候,他们赢了。

【讨论】:

    【解决方案2】:

    我知道 for 循环是错误的,b 永远不会大于字符串的长度。您将如何解决这个问题?

    直接使用String中的equals()

    你会为 a 和 b 给出什么合理的变量名?

    a 可能是result

    b 可能是index


    这里是open jdk 7

    中equals()的实现
     public boolean equals(Object anObject) {
     1014           if (this == anObject) {
     1015               return true;
     1016           }
     1017           if (anObject instanceof String) {
     1018               String anotherString = (String)anObject;
     1019               int n = count;
     1020               if (n == anotherString.count) {
     1021                   char v1[] = value;
     1022                   char v2[] = anotherString.value;
     1023                   int i = offset;
     1024                   int j = anotherString.offset;
     1025                   while (n-- != 0) {
     1026                       if (v1[i++] != v2[j++])
     1027                           return false;
     1028                   }
     1029                   return true;
     1030               }
     1031           }
     1032           return false;
     1033       }
    

    【讨论】:

      【解决方案3】:

      我总是使用 StringUtils.compare (Apache Commons)。这也可以处理任一 String 参数的 null 情况。

      【讨论】:

        【解决方案4】:

        a => 结果 b => 当前

        检查任一参数是否为null 会很有帮助。

        【讨论】:

        • 我不会使用current,因为它可能被误认为是“当前字符”而它是“当前索引”。 index 可能更好。
        【解决方案5】:

        有几点:

        1. 比较字符串是否相等时,请使用 .equals 方法。 == 用于比较对象引用并查看它们是否引用同一个实例。 .equals 实际上是比较 String 对象中的字符。
        2. 即使你按照自己的方式做事(这是不正确的),for 循环也应该是这样的

          for (int b = 0; b

        【讨论】:

          猜你喜欢
          • 2014-11-11
          • 2012-06-28
          • 1970-01-01
          • 1970-01-01
          • 2018-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多