2016-09-08 10 views
0

現在、Javaで大文字と小文字を区別しないpalindromeチェッカーを作成しようとしています。 他のトピックを確認しましたが、いずれも問題を解決していないようです。Java palindrome checker - 大文字と小文字を区別しない

は、ここに私のコードです:

import java.util.Scanner; 

public class Homework5_2 { 
    public static void main(String[] args) { 
     boolean flag = true; //palindrome or not 
     Scanner console = new Scanner(System.in); 
     System.out.print("Enter one or more words: "); 
     String s = console.next(); 

     //checks if string contains spaces 
     if (s.matches(".*\\s+.*")) { 
      s = s.replaceAll("\\s+",""); 
     } 

     s = s.toLowerCase(); 
     int stringLength = s.length(); 
     int index = 0; 

     //checks the string from both sides going towards the middle 
     for (int i=0;i<stringLength/2;i++) { 
     index = stringLength-i-1; 
     if (!(s.charAt(i) == s.charAt(index))) { 
      flag = false; 
      } 
     } 

     if (flag == true) { 
      System.out.println("The string is a palindrome!"); 
     } else { 
      System.out.println("The string is not a palindrome!"); 
     } 
    } 
} 

文字列が回文として報告されていないとして、「OS SO」、間違った出力のような文字列を入力します。 この問題は、空白がない場合、同じ文字列が正しく回文として報告されるため、スペースに関連しているようです。 私は本当にこのコードの脆弱性を理解することに興味があり、どんな助けも非常に高く評価されるでしょう!

答えて

2

console.next()の代わりにconsole.nextLine()を使用してください。

デフォルトでは、console.next()はスペースで区切られた次のトークンだけを収集するので、「Os SO」と入力すると、String s変数に実際に「Os」が格納されます。

回文のチェックの点では、文字列内の個々の文字を確認するためにインデックスを使用する代わりに、文字列を逆にして逆の文字列が元の文字列と等しいかどうかを確認する方が簡単です。

0

これが問題のために私のソリューションです:

import java.util.Scanner; 

public class CheckPalindrome { 

    public static void main(String[] args) { 
     Scanner console = new Scanner(System.in); 
     String userInput = ""; 
     String auxiliar = ""; 

     userInput = console.nextLine(); 
     auxiliar = new StringBuilder(userInput).reverse().toString(); 

     if (userInput.equalsIgnoreCase(auxiliar)) { 
      System.out.println("This string is a palindrome"); 
     } else { 
      System.out.println("This string is not a palindrome"); 
     } 

     console.close(); 
    } 
} 
関連する問題