2013-07-31 3 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() , чтобы удалить ведущие и завершающие пробелы, если вы хотите игнорировать только ведущие и конечные пробелы. Также StringUtils от Apache Commons имеет гораздо больше функций, чтобы помочь

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

Как правильно указывает Золтан, все ответы, кроме него, на самом деле ошибочны.

Для использования функции из библиотеки третьей стороны, я предлагаю 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

Объяснение того, что вы сделали, могло бы помочь расспросить больше. –