我有一个例子。
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");
}
}
}
我需要检查这些字符串而不考虑空格。我该如何实现这一目标?当我比较它们时,如何忽略字符串中的空格?
答案 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();
}