2017-05-05 32 views
1

我試圖找出是否一個給定的String是迴文,但它從來沒有得到的進入if塊打印「給定的字符串是一個迴文」即使迴文。Java字符串概念迴文

String s; 
Scanner scan = new Scanner(System.in); 

System.out.println("enter any string"); 
s = scan.nextLine(); 
System.out.println("contents of string s " + s); 
scan.close(); 

StringBuffer stringbuffer = new StringBuffer(s); 
System.out.println("contents of stringbuffer " + stringbuffer); 
stringbuffer = stringbuffer.reverse(); 

System.out.println("contents of reversed stringbuffer " + stringbuffer); 
if(s.equals(stringbuffer)) 
{ 
    System.out.println(" given string is a palindrome"); 
} 

誰能告訴我我做錯了什麼?

+0

從一見鍾情,它看起來沒問題。在IF聲明中插入一個斷點,看看有什麼不同。可能是編碼。 – johni

回答

6

if(s.equals(stringbuffer))這裏您試圖比較StringStringBuffer,它總是會返回false

public boolean equals(Object anObject) { 
    if (this == anObject) { 
     return true; 
    } 
    if (anObject instanceof String) { 
     String anotherString = (String)anObject; 
     int n = value.length; 
     if (n == anotherString.value.length) { 
      char v1[] = value; 
      char v2[] = anotherString.value; 
      int i = 0; 
      while (n-- != 0) { 
       if (v1[i] != v2[i]) 
        return false; 
       i++; 
      } 
      return true; 
     } 
    } 
    return false; 
} 

這是.equals()方法內部如何運作。所以首先它會檢查其他對象是否爲instanceOf String。所以在這裏它將返回false,所以.equals()方法最終會在每種情況下給出false作爲輸出。

您可以使用有s.contentEquals(stringbuffer)比較兩個或轉換StringBufferString並調用String.equals()方法。

if(s.contentEquals(stringbuffer)) 
{ 
    System.out.println(" given string is a palindrome"); 
} 

或轉換StringBufferString,然後調用.equals()方法,

if(s.equals(stringbuffer.toString())) 
{ 
    System.out.println(" given string is a palindrome"); 
} 
+1

謝謝你讓我知道這是內部實現。 –

+1

@PrasadS如果您發現任何有用的答案,請接受它! –

+1

我無法做到這一點,因爲我只有13個聲望點。否則我會這樣做的。再次感謝您 –

2

你比較類型String和類型StringBufferString#equals()因此,它會永遠進入if塊。

String#equals()不僅比較String內容,但還會檢查其他的對象是你要找的String#contentEquals()它沒有做類型檢查的String

一個實例。

if(s.contentEquals(stringbuffer)) 
{ 
    System.out.println(" given string is a palindrome"); 
} 

StringBuffer變量轉換爲類型String比較之前。

if(s.equals(stringbuffer.toString())) 
{ 
    System.out.println(" given string is a palindrome"); 
} 
+1

是的,我嘗試了你之前建議的第二種方法。它工作正常。謝謝 –

3

在您的if條件中,您正在比較2種不同類型的對象。請記住String & StringBuffer是兩個不同的類,因此它們的對象不會相同。 爲了得到正確的結果,你需要得到String對象的StringBuffer ....

所以if(s.equals(stringbuffer.toString()))會爲你工作。