我正在使用.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));
}
我哪里错了?
答案 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。)你没有得到你期望的正确字符串。请务必打印或调试正在解析的字符串。