2017-10-02 11 views
-3

以下の「有効な回文」の問題を解決しようとしています。 stringbufferを文字列に変換して小文字に変換すると、文字列はすべて小文字で表示されますが、s.charAt(i)を使って比較すると大文字になります。文字は小文字に変換されませんが、文字列にはすべて小文字が使用されます

public static void main(String []args){ 

    String s = "aA"; 

    String[] strings = s.split("[^A-Za-z0-9]"); 
    StringBuffer sb = new StringBuffer(); 

    for(int i =0; i<strings.length;i++){ 
     sb.append(strings[i]); 
    } 
    String newString = sb.toString().toLowerCase(); 
    System.out.println("New String "+newString);***// output : aa(lower case)*** 

    for(int i =0; i<newString.length()/2;i++){ 
     if(s.charAt(i) != s.charAt(newString.length()-i-1)){ 
      System.out.println(s.charAt(i));//**output 'a** 
      System.out.println(s.charAt(newString.length()-i-1));//***output 'A'*** 
     } 

    } 

誰かが理由を説明できますか?

+4

なぜでしょうか? 's'はこのコードでは常に' 'aA ''です。 –

答えて

0

小文字を使用する場合は、sの代わりにnewString変数を使用します。

for(int i =0; i<newString.length()/2;i++){ 
    if(newString.charAt(i) != newString.charAt(newString.length()-i-1)){ 
     System.out.println(newString.charAt(i)); 
     System.out.println(newString.charAt(newString.length()-i-1)); 
    } 

}

あなたが回文をチェックすることを計画したりしていない場合は、次の一点の解決策になることができます。

String s = "aA"; 

    StringBuffer stringBuffer = new StringBuffer(s); 
    String reverse = stringBuffer.reverse().toString().toLowerCase(); 

    if (reverse.equals(s.toLowerCase())) { 
     System.out.println("Palindrome"); 
    } else { 
     System.out.println("Not palindrome"); 
    } 
1

あなたは、小文字の文字列がnewStringであり、sを変更されていません。 2番目の変数の変数を次のように置き換える必要があります。

for(int i =0; i<newString.length()/2;i++){ 
     if(newString.charAt(i) != newString.charAt(newString.length()-i-1)){ 
      System.out.println(s.charAt(i));//**output 'a** 
      System.out.println(s.charAt(newString.length()-i-1));//***output 'A'*** 
     } 
    } 
関連する問題