比较两个字符串以忽略 java 中的大小写和特殊字符?
Compare two strings to ignore case and special characters in java?
String s1 = "Madam,I'm Adam";
String s2 = "madam i m adam";
String str = s1.replaceAll("-,' "," ");
System.out.println(str.equalsIgnoreCase(s2)); // false
我们怎样才能使 s1 和 s2 相等?
使用正则表达式过滤字符串,如 [^\w\d\s]
- 不是字符,不是数字,没有空格:
public static void main(String[] args) {
String s1 = "Madam,I'm Adam";
String s2 = "madam i m adam";
System.out.printf(" -> %s\n", normalizedEquals(s1, s2)); // false
}
static String normalize(String s) {
// here goes normalization
return s.replaceAll("[^\w\d\s]", " ");
}
static boolean normalizedEquals(String s1, String s2) {
s1 = normalize(s1);
s2 = normalize(s2);
System.out.printf(" -> %s\n -> %s\n", s1, s2);
return s1.equalsIgnoreCase(s2);
}
输出:
-> Madam I m Adam
-> madam i m adam
-> true
添加了以下行并且应该可以工作
String str = s1.replaceAll("[,']"," ");
测试正则表达式的最佳方法是 http://regexr.com/
String s1 = "Madam,I'm Adam";
String s2 = "madam i m adam";
String str = s1.replaceAll("-,' "," ");
System.out.println(str.equalsIgnoreCase(s2)); // false
我们怎样才能使 s1 和 s2 相等?
使用正则表达式过滤字符串,如 [^\w\d\s]
- 不是字符,不是数字,没有空格:
public static void main(String[] args) {
String s1 = "Madam,I'm Adam";
String s2 = "madam i m adam";
System.out.printf(" -> %s\n", normalizedEquals(s1, s2)); // false
}
static String normalize(String s) {
// here goes normalization
return s.replaceAll("[^\w\d\s]", " ");
}
static boolean normalizedEquals(String s1, String s2) {
s1 = normalize(s1);
s2 = normalize(s2);
System.out.printf(" -> %s\n -> %s\n", s1, s2);
return s1.equalsIgnoreCase(s2);
}
输出:
-> Madam I m Adam
-> madam i m adam
-> true
添加了以下行并且应该可以工作
String str = s1.replaceAll("[,']"," ");
测试正则表达式的最佳方法是 http://regexr.com/