【问题标题】:how to compare two string arrays without java utils如何在没有java utils的情况下比较两个字符串数组
【发布时间】:2013-01-02 18:25:55
【问题描述】:

检查数组arr1是否包含与java中相同顺序的arr2相同的元素。

例如:

    isTheSame({"1", "2", "3"}, {"1", "2", "3"}) → true
    isTheSame({"1", "2", "3"}, {"2", "1", "1"}) → false
    isTheSame({"1", "2", "3"}, {"3", "1", "2"}) → false

目前为止

public boolean isTheSame(String[] arr1, String[] arr2)
{
   if (arr1.length == arr2.length)
   {
      for (int i = 0; i < arr1.length; i++)
       {
          if (arr1[i] == arr2[i])
          {
            return true;
          }
       }
    }
    return false;  
 }

这样做的问题是它只比较两个数组的第一个元素。

【问题讨论】:

  • 您的实际程序中是否有if (arr1[i] == arr2[i] 的右括号?
  • 对于初学者,请阅读 this 了解如何在 java 中比较字符串,并修复编译时错误(您忘记在第二个 if 条件下关闭括号)。

标签: java arrays compare


【解决方案1】:

您一直在迭代,直到找到匹配项。你应该寻找一个不匹配的字符串,你应该使用equals 而不是==

// same as Arrays.equals()
public boolean isTheSame(String[] arr1, String[] arr2) {
    if (arr1.length != arr2.length) return false;
    for (int i = 0; i < arr1.length; i++)
        if (!arr1[i].equals(arr2[i]))
            return false;
    return true;
}

仅供参考,这也是 Arrays.equals 在处理 null 值时所做的。

public static boolean equals(Object[] a, Object[] a2) {
    if (a==a2)
        return true;
    if (a==null || a2==null)
        return false;

    int length = a.length;
    if (a2.length != length)
        return false;

    for (int i=0; i<length; i++) {
        Object o1 = a[i];
        Object o2 = a2[i];
        if (!(o1==null ? o2==null : o1.equals(o2)))
            return false;
    }

    return true;
}

【讨论】:

  • 可靠的答案。首先看看库的实现总是值得的。
【解决方案2】:
public boolean isTheSame(String[] arr1, String[] arr2)
{
    if (arr1.length == arr2.length)
    {
         for (int i = 0; i < arr1.length; i++)
          {
             if ((arr1[i] != null && arr2[i] != null && !arr1[i].equals(arr2[i]))
                 || (arr1[i] != null && arr2[i] == null) || 
                 (arr2[i] != null && arr1[i] == null))
              {
                return false;
              }
          }
    } else {
         return false;  
    }
    return true;  
 }

但它非常不理想。

【讨论】:

    【解决方案3】:

    是的,它只会比较第一个元素。看看它在做什么:

    public boolean isTheSame(String[] arr1, String[] arr2)
    {
        if (arr1.length == arr2.length)
        {
             for (int i = 0; i < arr1.length; i++)
              {
                 // if the elements are equal ..
                 // (NOTE: this will only be true for INTERNED strings!!)
                 if (arr1[i] == arr2[i]) // fixed typo
                  {
                    // .. then STOP LOOKING and RETURN TRUE
                    // wait- WHY?
                    return true;
                  }
              }
              // searched everything- but still RETURN FALSE??
        }
        return false;  
     }
    

    虽然== 的使用不是由于字符串实习而提供的示例数据的问题,但它总有一天会为您提供真实数据。不要将== 用于对象,除非需要身份相等

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      • 2020-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      相关资源
      最近更新 更多