String.equals比较无法匹配

时间:2017-04-04 22:19:40

标签: java string string-comparison

我正在使用.equals进行String比较,但x"OU"不匹配:

String memberOfValue="CN=cn,​OU=ou,​OU=roles,​OU=de,​OU=apps,​DC=meta,​DC=cc,​DC=com";
String[] pairs = memberOfValue.split(",");
for (int i=0;i<pairs.length;i++) {
    String pair = pairs[i];
    String[] keyValue = pair.split("=");
    System.out.println(keyValue[0]);
    String x = keyValue[0];
    String y = "OU";
    System.out.println(x);
    System.out.println(x.equals(y));
}

我哪里错了?

3 个答案:

答案 0 :(得分:5)

添加这两行代码会显示问题:

System.out.println("x: " + x + " - " + x.chars().boxed().collect(Collectors.toList()));
System.out.println("y: " + y + " - " + y.chars().boxed().collect(Collectors.toList()));

它给出了

x: ​OU - [8203, 79, 85]
y: OU - [79, 85]

这表明您的字符串中有一些不可见的char,其整数值为8203(零宽度空间,请参阅What's HTML character code 8203?)。不知道你是怎么做到的。

答案 1 :(得分:1)

正如@JB Nizet所说,你的memberOfValue变量中有不可打印的字符,例如有一些类型的字符:

control, format, private use, surrogate, unassigned, etc...

以下是完整列表:http://www.fileformat.info/info/unicode/category/index.htm

在这些情况下,您可以使用此正则表达式删除字符串中的所有字符:\\P{Print}

例如:

String x = keyValue[0].replaceAll("[\\P{Print}", "");

再次比较字符串时,结果将是正确的。

答案 2 :(得分:0)

我所看到的问题有两个可能存在的问题。

A。)如果字符串大写不同,除非你使用方法.equalsIgnoreCase()而不是.equals()

,否则它们不会返回相等的值

B。)你没有得到你期望的正确字符串。请务必打印或调试正在解析的字符串。