2016-09-08 2 views
0

В настоящее время я пытаюсь написать проверку палиндрома в Java, которая нечувствительна к регистру. Я проверил другие темы, но ни один из них, похоже, не решил мою проблему.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.nextLine() вместо console.next().

По умолчанию console.next() только собирает следующий разделитель пространства, поэтому, когда вы вводите «Os SO», он фактически сохраняет «Os» в переменной String s.

С точки зрения проверки на палиндромы, гораздо проще изменить строку и проверить, равна ли обратная строка оригиналу вместо использования индексов для проверки каждого отдельного символа в строке.

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(); 
    } 
} 
Смежные вопросы