자바 문자열 비교에 사소한 문제가 있습니다.이상한 자바 문자열 비교
String을 받아서 사용자 정의 트리 형식으로 구문 분석하는 클래스를 작성했습니다. 나는이 트리를 String으로 다시 변환하는 toString 클래스를 작성했다. 유닛 테스트의 일부로, 나는 toString 메소드에 의해 생성 된 String이 처음에 파싱 된 String과 동일한 지 확인하고있다.
다음은 몇 가지 출력물을 사용한 간단한 테스트로, 어떻게 진행되는지 확인할 수 있습니다.
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
수동으로 각각 그들이 정확히 동일 T1과 T2에 EXP1 및 EXP2 문자열을 비교하는 기준으로합니다. 그러나 어떤 이유로 자바는 주장하고있다.
.equals()
대신 ==
을 사용하는 것이 분명한 실수는 아니지만 두 개의 겉으로는 동일한 문자열이 다른 이유는 무엇입니까? 어떤 도움을 많이 주시면 감사하겠습니다 :)
diff 도구와 비교해 보면 다른 문자가 표시됩니다. 아니면 "수동으로 비교"한다는 의미입니까? –
도움을 받으려면 구문 분석 및 toString 코드가 필요합니다. –
@DonRoby 확실히 문제는 어떻게 생성되는지보다는 오히려 동일하게 보이는 두 개의 문자열을 비교하는 것입니다. 솔루션을 더 빨리 찾을 수 있도록 코드를 게시 해 드리겠습니다.하지만 지금은 조금 혼란 스럽습니다. –