2013-07-31 38 views
13

我有一個例子。如何在不考慮空格的情況下比較java中的兩個字符串?

public class Test { 
    public static void main(String[] args) { 
     String a="VIJAY KAKADE"; 
     String b="VIJAY KAKADE"; 
     if(a.equalsIgnoreCase(b)){ 
      System.out.println("yes"); 
     }else{ 
      System.out.println("no"); 
     } 
    } 
} 

我需要檢查這些字符串而不考慮空格。我如何實現這一目標?我比較它們時如何忽略字符串中的空格?

+4

'st.replace(」」, 「」) '是你的朋友。 – moonwave99

回答

24

您可以嘗試更換所有空的空間來創建一個新的字符串。

if(a.replaceAll("\\s+","").equalsIgnoreCase(b.replaceAll("\\s+",""))) { 
    // this will also take care of spaces like tabs etc. 
} 

然後進行比較。

+0

不需要'replaceAll()'。 replace()會很好。 –

+0

'replace'不需要正則表達式。 – arshajii

+0

你以前的代碼至少是一個工作代碼,'\\ s +'不能用'String#replace' – anubhava

12

與空字符串替換空間:

if (a.replace(" ", "").equalsIgnoreCase(b.replace(" ", ""))) 
+1

如果'a =「ANN MARIE」'和'b =「ANNMARIE」'會怎麼樣?他們不是同一個名字,但是這個解決方案會評估他們。請在下面考慮我的答案。 –

0

您可以使用String.replace()刪除兩個字符串中的空格。

String aMod = a.replace(" ",""); 
    String bMod = b.replace(" ",""); 
    if(aMod.equalsIgnoreCase(bMod)){ 
    ... 
1

String#replace()方法對你很有幫助。

public static void main(String[] args) { 
    String a="VIJAY KAKADE"; 
    String b="VIJAY KAKADE"; 
    a = a.replace(" ", ""); 
    b = b.replace(" ", ""); 
    if(a.equalsIgnoreCase(b)){ 
     System.out.println("yes"); 
    }else{ 
     System.out.println("no"); 
    } 
} 
1

如果要更換所有空白,包括標籤等,你可以使用

a = yourOriginalString.replaceAll("\\s", ""); 
b = yourOriginalString.replaceAll("\\s", ""); 
return a.equalsIgnoreCase(b); 

編輯:哇ninja'd像赫克

1
a.replace(" ","") 

是你最好的選擇。但是,如果您只想忽略前導空白和尾隨空白,則可以使用 a.trim() 刪除前導空白和尾隨空白。同樣來自於Apache公地StringUtils的具有更多的功能,以幫助

9

我想用一個空字符串替換所有空間帶來驗證以下情況(找到兩個名字相等)的危險:

String a = "ANN MARIE O'RIORDAN" 
String b = "ANNMARIE O'RIORDAN" 

我知道我可能會在這裏拆分毛髮,但是在尋找類似的解決方案來驗證單元測試中的SQL查詢時,我發現了這個問題。因爲我的查詢是多行static final Strings,我想確保我沒有錯過任何地方的空間。

爲此,我想用一個空格替換所有空格,或者特殊字符是最安全的解決方案 - 然後確實需要的正則表達式:

if (a.trim().replaceAll("\\s+", " ").equalsIgnoreCase(b.trim().replaceAll("\\s+", " "))) { 
    // Strings equivalent 
} 

的思考?

+0

我想強調,你的答案是/是唯一正確的答案。我增加了另一種方式。有趣的是,所有快速答案都沒有看到這個問題。 – sevenforce

6

正如Zoltan正確指出的,除了他之外的所有答案都是錯誤的。

使用來自第三方庫的功能,我建議hamcrest

import static org.hamcrest.text.IsEqualIgnoringWhiteSpace.equalToIgnoringWhiteSpace; 

public class Main { 
    public static void main(String[] args) { 
     String a = "VIJAY KAKADE"; 
     String b = "VIJAY KAKADE"; 
     System.out.print(String.format("'%s' and '%s' matching: ", a, b)); 
     if (equalToIgnoringWhiteSpace(a).matches(b)) { 
      System.out.println("yes"); 
     } else { 
      System.out.println("no"); 
     } 

     String c = "VIJAYKAKADE"; 
     System.out.print(String.format("'%s' and '%s' matching: ", a, c)); 
     if (equalToIgnoringWhiteSpace(a).matches(c)) { 
      System.out.println("yes"); 
     } else { 
      System.out.println("no"); 
     } 
    } 
} 

回報:

'VIJAY KAKADE' and 'VIJAY KAKADE' matching: yes 
'VIJAY KAKADE' and 'VIJAYKAKADE' matching: no 
0
public static void main(String args[]) { 
    String a = "My Name is A B"; 
    String b = "My Name is A B"; 

    System.out.println("Match = " + equalsIgnoreSpace(a, b, false)); 
} 

static boolean equalsIgnoreSpace(String s1, String s2, boolean matchCase) { 

    String val1 = stripExtraSpaces(s1); 
    String val2 = stripExtraSpaces(s2); 

    if(matchCase) { 
     return val1.equals(val2); 
    } else { 
     return val1.equalsIgnoreCase(val2); 
    } 
} 

static String stripExtraSpaces(String s) { 
    String formattedString = ""; 
    java.util.StringTokenizer st = new java.util.StringTokenizer(s); 

    while(st.hasMoreTokens()) { 
     formattedString += st.nextToken() + " "; 
    } 

    return formattedString.trim(); 
} 
+1

解釋你所做的事情可能會更有助於提問者。 –

相關問題