[英]how to compare two string arrays without java utils
檢查數組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;
}
這個問題是它只比較兩個數組的第一個元素。
你正在迭代,直到找到匹配。 你應該尋找一個不匹配的String,你應該使用equals
not ==
// 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;
}
FYI這是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;
}
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;
}
但這是非常不理想的。
是的,它只會比較第一個元素。 看看它在做什么:
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;
}
雖然由於字符串實習而使用==
不是所提供的示例數據的問題,但有一天它會咬你的真實數據。 除非需要標識相同 ,否則不要對對象使用==
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.