У меня небольшая проблема со сравнениями строк Java.
Я написал класс, который принимает строку и анализирует ее в произвольный тип дерева. Я написал класс toString, который затем снова преобразует это дерево в строку. В рамках своих модульных тестов я просто проверяю, что строка, сгенерированная методом toString, совпадает со строкой, которая была проанализирована в первую очередь.
Вот мой простой тест с несколькими распечатками, чтобы мы могли видеть, что происходит.
final String exp1 = "(a|b)";
final String exp2 = "((a|b)|c)";
final Node tree1 = Reader.parseExpression2(exp1);
final Node tree2 = Reader.parseExpression2(exp2);
final String t1 = tree1.toString();
final String t2 = tree2.toString();
System.out.println(":" + exp1 + ":" + t1 + ":");
System.out.println(":" + exp2 + ":" + t2 + ":");
System.out.println(exp1.compareToIgnoreCase(t1));
System.out.println(exp2.compareToIgnoreCase(t2));
System.out.println(exp1.equals(t1));
System.out.println(exp2.equals(t2));
Имеет следующий вывод; (NB ":" - используются в качестве разделителей, поэтому я могу убедиться, что нет лишних пробелов)
:(a|b):(a|b):
:((a|b)|c):((a|b)|c):
-1
-1
false
false
Исходя из сравнения вручную строк exp1 и exp2 с t1 и t2 соответственно, они абсолютно одинаковы. Но по какой-то причине Java настаивает на том, что они разные.
Это не очевидная ошибка использования ==
вместо .equals()
, но я озадачен тем, почему две, казалось бы, одинаковые строки различны. Любая помощь будет высоко ценится:)