[英]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.