      1  public class Sentence

      2  {

      3     private String text;

      4

      5     /**

      6        Constructs a sentence.

      7        @param aText a string containing all characters of the sentence

      8     */

      9     public Sentence(String aText)

     10     {

     11        text = aText;

     12     }

     13

     14     /**

     15        Tests whether this sentence is a palindrome.

     16        @return true if this sentence is a palindrome, false otherwise

     17     */

     18     public boolean isPalindrome()

     19     {

     20        int length = text.length();

     21

     22        // Separate case for shortest strings.

     23        if (length <= 1) return true;

     24

     25        // Get first and last characters, converted to lowercase.

     26        char first = Character.toLowerCase(text.charAt(0));

     27        char last = Character.toLowerCase(text.charAt(length - 1));

     28

     29        if (Character.isLetter(first) && Character.isLetter(last))

     30        {

     31           // Both are letters.

     32           if (first == last)

     33           {

     34              // Remove both first and last character.

     35              Sentence shorter = new Sentence(text.substring(1, length - 1));

     36              return shorter.isPalindrome();

     37           }

     38           else

     39           {

     40              return false;

     41           }

     42        }

     43        else if (!Character.isLetter(last))

     44        {

     45           // Remove last character.

     46           Sentence shorter = new Sentence(text.substring(0, length - 1));

     47           return shorter.isPalindrome();

     48        }

     49        else

     50        {

     51           // Remove first character.

     52           Sentence shorter = new Sentence(text.substring(1));

     53           return shorter.isPalindrome();

     54        }

     55     }

     56  }