Create and test a class Palindrome with a method isPalindrom
Create and test a class Palindrome with a method isPalindrome() that takes a char array as its parameter and determines if the characters in that array represent a palindrome, that is, if they read the same forward and backward, ignoring upper and lower case and any blanks.
------------------------------------------------------------------------------------------------------------------------------------------
The isPalindrome() method header is:
public static boolean isPalindrome(char[] a)
-------------------------------------------------------------------------------------------------------------------------------------
Write a program that will accept a sequence of characters ending in a period, read by Scanner nextLine(), and will decide whether the String without the period is a palindrome, using the isPalindrome() method. You can assume that the input contains only letters and blanks before the period, and that it does contain a period at the end of the characters to check.
-------------------------------------------------------------------------------------------------------------------------------------
Your main method should contain a loop that allows the user to check as many strings as they want until they type quit.
-------------------------------------------------------------------------------------------------------------------------------------
You may convert the input String to lower case before calling isPalindrome(), or you may have isPalindrome() do the conversion by using static method Character.toLowerCase().
Hints:
Convert the input String to an array of characters before calling isPalindrome() – you can use String method toCharArray(), but only convert the part of the input String before the period:
int period = input.indexOf(\".\");
String toCheck = input.substring(0, period);
char[] ca = toCheck.toCharArray();
Write a helper method removeBlanks() with this header:
private static char[] removeBlanks(char[] a)
that will return a new, possibly shorter, character array with any blanks in a removed. You can use static method
boolean Character.isWhiteSpace(char c) to find blanks in a.
Write another helper method reverse() with this header:
private static char[] reverse(char[] a)
that will return a new character array with the original characters in a in reverse order.
Finally, call removeBlanks() in isPalindrome(), then call reverse() and compare the two arrays – if they have all the same (lower case) characters, the input is a palindrome.
Solution
//Tested on eclipse in ubuntu,Linux
//Please make sure input string should ended with dot(.) or input string must contain dot(.)
//otherwise it will throw an exception
/**************Palindrome1.java**************/
import java.util.Scanner;
public class Palindrome1 {
/* method is used for checking given char array is Palindrome or not */
public static boolean isPalindrome(char[] a) {
char[] original;
original = removeBlanks(a).clone();
a = reverse(original);
if (String.valueOf(a).contentEquals(String.valueOf(original))) {
return true;
}
return false;
}
/*
* Removing blank space from char array first converting char array to
* String Then replace all blank and white spaces from string Then convert
* back to char array
*/
private static char[] removeBlanks(char[] a) {
/* Converting char array to String */
String line = String.valueOf(a);
/* Removing Blank spaces from string */
String lineWithoutSpaces = line.replaceAll(\"\\\\s+\", \"\");
/* Converting String into char array */
a = lineWithoutSpaces.toCharArray();
return a;
}
/*
* Reversing string first convert char array to string Then using String
* buffer we reversed the string then convert back to char array and
* returned that char array
*/
private static char[] reverse(char[] a) {
/* Converting char array to String */
String line = String.valueOf(a);
StringBuffer buffer = new StringBuffer(line);
buffer.reverse();
a = buffer.toString().toCharArray();
return a;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while (true) {
/* Prompt for reading input from user */
System.out.println(\"Please Enter the string\");
String line = input.nextLine();
/* getting index of . */
int period = line.indexOf(\".\");
/* Getting sub string */
String toCheck = line.substring(0, period).toLowerCase();
/* Converting into char array */
char[] ca = toCheck.toCharArray();
/* Calling removeBlanks method */
Boolean flag = Palindrome1.isPalindrome(ca);
/*
* If returned flag is true the given input is palindrome otherwise
* it is not
*/
if (flag) {
System.out.println(\"The Input is a Palindrome\");
} else {
System.out.println(\"The Input is not a Palindrome\");
}
/* Prompt for user input on loop condition */
System.out.println(\"Do u want to test another string(yes or quit)\");
String choice = input.nextLine();
if (choice.equalsIgnoreCase(\"quit\")) {
System.exit(1);
}
}
}
}
/*************output*******************/
Please Enter the string
radar.
The Input is a Palindrome
Do u want to test another string(yes or quit)
yes
Please Enter the string
malyalam.
The Input is not a Palindrome
Do u want to test another string(yes or quit)
yes
Please Enter the string
malayalam.
The Input is a Palindrome
Do u want to test another string(yes or quit)
quit
Thanks a lot


