Hey so this is my code for checking for palindromes...it compiles fine, the problem is it doesnt work. Basically I converted the four sentences into strings without spaces or other characters and added them to a new string called newstr....i used the newstr to check for a palindrome in the latter part of my check palindrome method(after the first for loop), which works perfectly fine normally(when i dont have to remove spaces & non letter characters first)? By looking at my code do you see anything wrong or why it isnt finding the first 3 sentences as palindromes...thanks!
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.*;
public class Palindrome2 {
//Variables
static String newstr = "";
static char[] letters;
static char letters2;
public static void main (String[] argv)
{
// Oldest known recorded palindrome.
String str = "Evil did I dwell; lewd I did live";
System.out.println ( str + " " + checkPalindrome(str) );
//reset newstr after checking each sentence
newstr = "";
// Oldest reference.
str = "Madam, I'm Adam";
System.out.println ( str + " " + checkPalindrome(str) );
newstr = "";
// One of the most famous.
str = "A man, a plan, a canal: Panama";
System.out.println ( str + " " + checkPalindrome(str) );
newstr = "";
// Not a palindrome, but a palingram:
str = "He was, was he?";
System.out.println ( str + " " + checkPalindrome(str) );
newstr = "";
}
static String checkPalindrome (String str)
{
// Extract the letters.
char[] letters = str.toCharArray ();
//iterate through all the char in the sentences
int len = letters.length;
for(int i =0; i<len; i++){
//checks if current char is a letter and adds each char to newstr
if(Character.isLetter(letters[i])){
letters2 = letters[i];
newstr += letters2;
}
}
// Extract the letters.
letters = newstr.toCharArray ();
System.out.print(letters);
// Create an empty stack.
Stack<Character> stack = new Stack<Character>();
// The letters must "balance" up to the middle.
int mid = letters.length / 2;
// Push the first half.
for (int i=0; i<mid; i++) {
stack.push (letters[i]);
}
// Odd or even? We have to adjust the mid-point accordingly.
if (letters.length % 2 > 0) {
// Odd number => swallow middle letter.
mid = mid+1;
}
// Now check the second half.
for (int i=mid; i<letters.length; i++) {
char ch = stack.pop ();
if (ch != letters[i]) {
// Mismatch => not a palindrome.
return "is not a palindrome";
}
}
return "is a palindrome";
}
}