我在Java String比较中遇到小问题。奇怪的Java字符串比较
我写了一个类,它接受一个String并将其解析为一个自定义树类型。我写了一个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()
的明显错误,但我很难理解为什么两个看起来相同的字符串是不同的。任何帮助将不胜感激:)
尝试将它们与diff工具进行比较,它会告诉您哪些字符不同。或者那是你“手动比较”的意思? –
为了提供帮助,我们需要查看解析和toString代码。 –
@DonRoby当然,问题在于比较看似完全相同的两个字符串,而不是它们如何生成。我会很高兴地发布代码,因为它可以帮助更快地找到解决方案,但目前情况有点混乱。 –