Ответ 1
Вы можете попытаться создать новую строку, заменив все пустые пространства.
if(a.replaceAll("\\s+","").equalsIgnoreCase(b.replaceAll("\\s+",""))) {
// this will also take care of spaces like tabs etc.
}
затем сравните.
У меня есть один пример.
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(" ", "")))
Я думаю, что замена всех пробелов пустой строкой представляет опасность проверки следующей ситуации (определение двух имен):
String a = "ANN MARIE O'RIORDAN"
String b = "ANNMARIE O'RIORDAN"
Я знаю, что я могу разделить волосы здесь, но я нашел этот вопрос, ища аналогичное решение для проверки SQL-запросов в unit test. Поскольку мои запросы являются многострочными static final Strings
, я хотел убедиться, что я не пропустил нигде.
С этой целью я считаю, что заменять все пробелы одним пространством или, возможно, особым символом является безопасное решение, которое тогда требует регулярного выражения:
if (a.trim().replaceAll("\\s+", " ").equalsIgnoreCase(b.trim().replaceAll("\\s+", " "))) {
// Strings equivalent
}
Мысли?
Как правильно указывает Золтан, все ответы, кроме него, на самом деле ошибочны.
Для использования функций из сторонней библиотеки я предлагаю 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);
edit: woah ninja'd like heck
a.replace(" ","")
- ваш лучший выбор. Однако вы можете использовать
a.trim()
чтобы удалить ведущие и завершающие пробелы, если вы знаете, что хотите игнорировать только ведущие и конечные пробелы. Кроме того, StringUtils от apache commons имеет гораздо больше функций, чтобы помочь
Вы можете использовать String.replace(), чтобы удалить пробелы в обеих строках.
String aMod = a.replace(" ","");
String bMod = b.replace(" ","");
if( aMod.equalsIgnoreCase(bMod) ){
...
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();
}