如何在不考虑空格的情况下比较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"); } } } 

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

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

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

然后比较。

用空字符串替换空格:

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

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

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

我知道我可能会在这里分裂,但我在寻找类似的解决方案以在unit testing中validationSQL查询时发现了这个问题。 因为我的查询是多行static final Strings ,所以我想确保我没有错过任何地方的空格。

为此,我认为用一个空格替换所有空格,或者可能是一个特殊字符是最安全的解决方案 – 然后需要正则表达式:

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

思考?

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

为了使用第三方库的function,我建议使用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 

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

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

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

编辑:哇忍者喜欢哎呀

 a.replace(" ","") 

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

 public static void main(String args[]) { String a = "My Name is AB"; String b = "My Name is AB"; 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(); } 

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

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