2017-07-07 17 views
-2
public static void main(String args[]){ 
     String [] a={"A","B"}; 
     String[] b ={" B"," A"}; 
     Arrays.sort(a); 
     Arrays.sort(b); 
     System.out.println(Arrays.deepEquals(a,b)); 
} 

我想兩個字符串數組比較,而應返回真值,但它給人一種虛假的值,因爲的String [] B值有空間。如何修剪我的值併發送到deepEquals方法。如何調節值併發送至deepEquals方法()

+0

@Sotirios'靜態的isEqual布爾(字符串[] ARR1,字符串[] ARR2){ \t \t爲(字符串S:ARR1)!{ \t如果(Stream.of(ARR2).anyMatch(X - > x.trim()。equals(s.trim()))){ \t \t \t return false; \t} \t} \t \t回arr1.length == arr2.length; \t}'不爽嗎? ..它沒有在重複問題 – Yahya

回答

0

您可以先對每個字符串應用trim函數。

public String trim() 返回字符串的副本,與領先和 結尾的空白省略。

東西,如下應該工作:

void trimAll(String[] vec){ 
    for (int i = 0; i < vec.length; i++) 
     vec[i] = vec[i].trim(); 
} 

public static void main(String args[]){ 
     String [] a={"A","B"}; 
     String[] b ={" B"," A"}; 
     trimAll(a); 
     trimAll(b); 
     Arrays.sort(a); 
     Arrays.sort(b); 
     System.out.println(Arrays.deepEquals(a,b)); 
} 

Reference here

1

你可以通過數組中的每個元素,並使用trim功能。

String[] trimmedA = new String[a.length]; 
    for (int i = 0; i < a.length; i++) 
     trimmedA[i] = a[i].trim(); 

您還可以檢查的ab長度相等。如果他們不是,你可以立即返回假,而無需整理和修整。

在另一方面,如果你不需要重新使用原來的字符串,你可以做的地方修剪:

for (int i = 0; i < a.length; i++) 
    a[i] = a[i].trim(); 
+0

中提到,您不需要爲此創建另一個數組! – Yahya

+0

這取決於您是否要更改原始數組。 – 2017-07-07 15:18:54

+1

如果你正在通過陣列,你可以進行比較,也... –

0

的Java 8的流使這個漂亮整潔:

public static void main(String args[]){ 
    String [] a={"A","B"}; 
    String[] b ={" B"," A"}; 
    a = trimAndSort(a); 
    b = trimAndSort(b); 
    System.out.println(Arrays.deepEquals(a,b)); 
} 

private static String[] trimAndSort(String[] arr) { 
    return Arrays.stream(arr).map(String::trim).sorted().toArray(String[]::new); 
} 

請注意,由於您處理的是一維數組,因此您並不需要使用Arrays#deepEquals,而Arrays#equals就足夠了。

-1

trim()不符合所有的空格(它匹配所有具有值< =空格的字符,其中大多數在技術上不是空格)。因此,這是可行的。

for(int i=0;i<b.length,i++) 
{ 
    b[i] = b.replaceAll("\\p{Z}",""); 
} 
+0

爲什麼downvote?解釋是必不可少的 –

相關問題