rinuthomaz
rinuthomaz

Reputation: 1413

String.equals comparison fails to match

I am using .equals for String comparison below, but x does not match "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));
}

Where am I going wrong?

Upvotes: 0

Views: 1301

Answers (3)

JUAN CALVOPINA M
JUAN CALVOPINA M

Reputation: 3984

As @JB Nizet says, you have non-printable characters in your memberOfValue variable, there are some types of characters as for example:

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

Here is the complete list: http://www.fileformat.info/info/unicode/category/index.htm

In these cases, you can remove all characters from your string using this regular expression: \\P{Print}

For example:

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

When you compare the strings again, the result will be correct.

Upvotes: 1

JB Nizet
JB Nizet

Reputation: 692191

Adding these two lines of code shows the problem:

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

It gives

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

Which shows that you have some invisible char whose integer value is 8203 (zero width space, see What's HTML character code 8203?) in your string. Not sure how you got that.

Upvotes: 7

Raheel138
Raheel138

Reputation: 147

There are two possible problems from what I'm seeing.

A.) If the strings are capitalized differently they will not return equal unless you use the method .equalsIgnoreCase() instead of .equals()

B.) You're not getting the right strings that you're expecting. Be sure to print out or debug which string is getting parsed through.

Upvotes: 0

Related Questions