2017-05-09 10 views
0

에 대한 사실 반환하지 않는 이유는 두 문자열하지 equal.Here 내 코드입니다 :같음() 나는 이유를 발견하지 못한 두 개의 동일한 문자열

public static void main(String[] args) { 
     JTextArea jt=new JTextArea(); 
     jt.append("why \n me?"); //i set a test value to the JTextArea 
     Document doc = jt.getDocument(); 
     Element root = doc.getDefaultRootElement(); 
     Element element = root.getElement(0); 
     int start = element.getStartOffset(); 
     int end = element.getEndOffset(); 
//the code above is what i specifically need for my app, to bring a 
//specific line from a JTextArea 
     String s; 
    try { 
     s=doc.getText(start, end - start); 
    System.out.print("s = "+s); 

     if(s.equals("why")) //i expect equals() here to return true 
     System.out.print("s equals "+s); 
     else 
     System.out.print("s is not equal to "+s); 

    } catch (BadLocationException ex) { 
     ex.getStackTrace(); 
    }   
} 

나는이 프로그램을 실행 한 후 얻을 결과 : 당신이

s=doc.getText(start, end - start); 

당신은새로운 라인 앞에 공백을 가지고

s = why 
s is not equal to why 
+3

''왜 ''에 해당되지 사용할 수 있습니다에' "왜"' – Eran

+0

프로그램의 = "왜 \ n을"에서 – justMe

답변

1

당신의 결과는 공간이 있어야합니다에는 \n 앞에 공백이 있습니다. 당신이 작성해야합니다

s=doc.getText(start, (end -1) - start); 

아니면 그냥 공간으로 비교하면서 그것을 트리밍 할 수 있습니다. 공백 이외의 다른 문자가 있으면 작동하지 않을 수 있습니다. System.out.print("s = >>" + s +"<<");

당신이 마지막에 당신이 공백과 줄 바꿈 포함되어있는 것으로 확인 :

s = >>why 
<<s is not equal to why 

why \n가 아닌이 why 에 동일

0

당신은 눈 포수로 그것을 밖으로 인쇄 할 경우 s = doc.getText(start, end - start).trim();을 사용하면 제대로 작동합니다.

1

가장 일반적인 이유는 s 문자열이 실제로 "why "이라는 것입니다. 공백 문자를 주목하십시오.

실제로 JTextArea에 추가하는 문자열을 보면 "why"다음에 그리고 개행 전에 공백이 있습니다.


일반적으로, 당신은 디버깅 목적으로 문자열을 표시 할 때, 그 어떤 선행 또는 후행 공백을 알 수 있도록 따옴표로 표시하는 것이 좋습니다. 예를 들어 :

 System.out.println("s = '" + s + "'"); 

또 다른 가능한 설명은 (이 경우에는 거의 발생하지 않지만) homoglyphs이다; 예를 들어 과 같은 두 가지 유니 코드 코드 포인트가 일반적인 글꼴로 서로처럼 보입니다. 두 개의 문자열 객체의 내용을 비교하려면

-1

, 당신은 s.compareTo("why")==0