如何在不考虑空格的情况下比较java中的两个字符串?

时间:2013-07-31 15:00:20

标签: java string

我有一个例子。

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");
        }
    }
}

我需要检查这些字符串而不考虑空格。我该如何实现这一目标?当我比较它们时,如何忽略字符串中的空格?

9 个答案:

答案 0 :(得分:29)

您可以尝试通过替换所有空格来创建新字符串。

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

答案 1 :(得分:16)

我认为用空字符串替换所有空格会导致验证以下情况的危险(找到两个相同的名字):

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
}

思想?

答案 2 :(得分:12)

用空字符串替换空格:

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

答案 3 :(得分:10)

正如佐尔坦正确指出的那样,除了他之外的所有答案实际上都是错误的。

要使用第三方库中的功能,我建议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

答案 4 :(得分:2)

如果要替换所有空格,包括标签等,可以使用

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

编辑:哇忍者喜欢哎呀

答案 5 :(得分:1)

您可以使用String.replace()删除两个字符串中的空格。

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

答案 6 :(得分: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");
    }
}

答案 7 :(得分:1)

a.replace(" ","")

是你最好的选择。但是你可以使用 a.trim() 如果您知道只想忽略前导和尾随空格,则删除前导和尾随空格。来自apache commons的StringUtils还有更多功能可以帮助

答案 8 :(得分:1)

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();
}