Introduction
A palindrome is a word, phrase, number, or other sequence of characters that reads the same forward and backward (ignoring spaces, punctuation, and capitalization). Checking if a string is a palindrome is a common task in text processing. In this blog post, we will explore various methods to check if an input string is a palindrome in Java.
Table of Contents
- Using a Simple Loop
- Using StringBuilder's
reverse()
Method - Using Java 8 Streams
- Complete Example Program
- Conclusion
1. Using a Simple Loop
One of the simplest methods to check if a string is a palindrome is by comparing characters from the start and end of the string moving towards the center.
Example:
public class PalindromeCheckUsingLoop {
public static void main(String[] args) {
String input = "Madam";
boolean result = isPalindrome(input);
System.out.println("Is the string \"" + input + "\" a palindrome? " + result);
}
public static boolean isPalindrome(String str) {
str = str.toLowerCase().replaceAll("[^a-zA-Z0-9]", ""); // Normalizing the input
int left = 0;
int right = str.length() - 1;
while (left < right) {
if (str.charAt(left) != str.charAt(right)) {
return false;
}
left++;
right--;
}
return true;
}
}
Output:
Is the string "Madam" a palindrome? true
Explanation:
- The string is converted to lowercase and all non-alphanumeric characters are removed to normalize the input.
- A loop is used to compare characters from the start and end of the string moving towards the center.
- If any characters do not match, the string is not a palindrome.
2. Using StringBuilder's reverse()() Method
Another method to check if a string is a palindrome is by reversing the string and comparing it to the original string.
Example:
public class PalindromeCheckUsingStringBuilder {
public static void main(String[] args) {
String input = "Madam";
boolean result = isPalindrome(input);
System.out.println("Is the string \"" + input + "\" a palindrome? " + result);
}
public static boolean isPalindrome(String str) {
str = str.toLowerCase().replaceAll("[^a-zA-Z0-9]", ""); // Normalizing the input
String reversedStr = new StringBuilder(str).reverse().toString();
return str.equals(reversedStr);
}
}
Output:
Is the string "Madam" a palindrome? true
Explanation:
- The string is normalized by converting it to lowercase and removing non-alphanumeric characters.
- The
StringBuilder
'sreverse()
method is used to reverse the string. - The reversed string is compared to the original string to determine if it is a palindrome.
3. Using Java 8 Streams
Java 8 Streams provide a modern and concise way to check if a string is a palindrome.
Example:
import java.util.stream.IntStream;
public class PalindromeCheckUsingStreams {
public static void main(String[] args) {
String input = "Madam";
boolean result = isPalindrome(input);
System.out.println("Is the string \"" + input + "\" a palindrome? " + result);
}
public static boolean isPalindrome(String str) {
str = str.toLowerCase().replaceAll("[^a-zA-Z0-9]", ""); // Normalizing the input
return IntStream.range(0, str.length() / 2)
.allMatch(i -> str.charAt(i) == str.charAt(str.length() - i - 1));
}
}
Output:
Is the string "Madam" a palindrome? true
Explanation:
- The string is normalized by converting it to lowercase and removing non-alphanumeric characters.
- An
IntStream
is used to iterate over the first half of the string. - The
allMatch()
method checks if all characters from the start and end of the string match.
4. Complete Example Program
Here is a complete program that demonstrates all the methods discussed above to check if a string is a palindrome.
Example Code:
import java.util.stream.IntStream;
public class PalindromeCheckExample {
public static void main(String[] args) {
String input = "A man, a plan, a canal, Panama";
// Using a Simple Loop
boolean resultLoop = isPalindromeUsingLoop(input);
System.out.println("Using Simple Loop:");
System.out.println("Is the string \"" + input + "\" a palindrome? " + resultLoop);
// Using StringBuilder's reverse() Method
boolean resultStringBuilder = isPalindromeUsingStringBuilder(input);
System.out.println("\nUsing StringBuilder's reverse() Method:");
System.out.println("Is the string \"" + input + "\" a palindrome? " + resultStringBuilder);
// Using Java 8 Streams
boolean resultStreams = isPalindromeUsingStreams(input);
System.out.println("\nUsing Java 8 Streams:");
System.out.println("Is the string \"" + input + "\" a palindrome? " + resultStreams);
}
public static boolean isPalindromeUsingLoop(String str) {
str = str.toLowerCase().replaceAll("[^a-zA-Z0-9]", ""); // Normalizing the input
int left = 0;
int right = str.length() - 1;
while (left < right) {
if (str.charAt(left) != str.charAt(right)) {
return false;
}
left++;
right--;
}
return true;
}
public static boolean isPalindromeUsingStringBuilder(String str) {
str = str.toLowerCase().replaceAll("[^a-zA-Z0-9]", ""); // Normalizing the input
String reversedStr = new StringBuilder(str).reverse().toString();
return str.equals(reversedStr);
}
public static boolean isPalindromeUsingStreams(String str) {
str = str.toLowerCase().replaceAll("[^a-zA-Z0-9]", ""); // Normalizing the input
return IntStream.range(0, str.length() / 2)
.allMatch(i -> str.charAt(i) == str.charAt(str.length() - i - 1));
}
}
Output:
Using Simple Loop:
Is the string "A man, a plan, a canal, Panama" a palindrome? true
Using StringBuilder's reverse() Method:
Is the string "A man, a plan, a canal, Panama" a palindrome? true
Using Java 8 Streams:
Is the string "A man, a plan, a canal, Panama" a palindrome? true
5. Conclusion
Checking if a string is a palindrome can be accomplished in multiple ways in Java. The simple loop method is straightforward and easy to understand, while the StringBuilder
's reverse()
method provides a quick and concise solution. Java 8 Streams offer a modern, functional programming approach to the same problem.
By understanding these different methods, you can choose the one that best fits your needs and coding style. Happy coding!
Comments
Post a Comment
Leave Comment