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