繁体   English   中英

String.equals比较失败

[英]String.equals comparison fails to match

我在下面使用.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));
}

我要去哪里错了?

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

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(零宽度空格,请参阅HTML字符代码8203是什么? )。 不知道你怎么得到的。

正如@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}", "");

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

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

A.)如果字符串的大小写不同,除非您使用方法.equalsIgnoreCase()而不是.equals(),否则它们将不会返回相等。

B.)您没有得到期望的正确字符串。 确保打印出或调试通过哪个字符串进行解析。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM