This is the complete solution to find the String Palindrome check from the given String. The solution consists of a functional interface, super class and a couple of derived classes implementing the interface.
package migrate;
import java.util.HashMap;
public interface StringPalindromeIntf {
//Defining the functional interface with SAM 'Palindrome'
public HashMap<String, String> Palindrome(String str);
//Static method of the interface, getting invoked directly with the interface name only
static void displayMsg(String Str, String isPalin) {
try {
if (Str != null) {
if (!isPalin.equalsIgnoreCase("error")) {
if (isPalin.equalsIgnoreCase("yes")) {
System.out.println("The String= " + Str + " is Palindrome");
} else {
System.out.println("The String= " + Str + " is not a Palindrome");
}
} else {
System.out.println("There might be some issue with the code\n");
}
} else {
System.out.println("The given string is null\n");
}
} catch (NullPointerException npx) {
System.out.println("NullPointerException:: " + npx.getMessage());
}
}
}
package migrate;
import java.util.HashMap;
import java.util.Optional;
import java.util.logging.Logger;
class StringInput {
private String finaStr;
HashMap<String, String> strStatus = new HashMap<>();
static Logger logger = Logger.getLogger(StringInput.class.getName());
// Validating the input received from the derived classes
public boolean validateInput(String strValue) {
// Logging the details of the called class and the current method name
String cName = Thread.currentThread().getStackTrace()[2].getClassName();
String mName = Thread.currentThread().getStackTrace()[1].getMethodName();
logger.info("This method " + mName + " called from " + cName);
Optional<String> str = Optional.ofNullable(strValue);
// Doing the null check using the Optional class
if (str.isPresent()) {
setFinaStr(str.get());
return true;
} else {
setFinaStr(null);
return false;
}
}
public String getFinaStr() {
return finaStr;
}
public void setFinaStr(String finaStr) {
this.finaStr = finaStr;
}
}
class Palindrome_Check_Using_LambdaExp extends StringInput implements StringPalindromeIntf {
// Using the functional interface to define the Lambda expression
StringPalindromeIntf palinIntf = ((str) -> {
try {
String tmp = "";
int len = str.length() - 1;
while (len >= 0) {
tmp += str.charAt(len);
len -= 1;
}
if (tmp.equalsIgnoreCase(str)) {
strStatus.put(str, "yes");
} else {
strStatus.put(str, "no");
}
} catch (StringIndexOutOfBoundsException arx) {
System.out.println("StringIndexOutOfBoundsException:: " + arx.getMessage());
strStatus.put(str, "error");
} finally {
System.out.println("Palindrome Check Completed");
}
return strStatus;
});
@Override
public HashMap<String, String> Palindrome(String str) {
// Logging the details of the called class and the current method name
String cName = Thread.currentThread().getStackTrace()[2].getClassName();
String mName = Thread.currentThread().getStackTrace()[1].getMethodName();
logger.info("This method " + mName + " called from the class " + cName);
if (validateInput(str)) {
StringPalindromeIntf.displayMsg(str, palinIntf.Palindrome(str).get(str));
} else {
strStatus.put(str, null);
StringPalindromeIntf.displayMsg(str, strStatus.get(str));
}
return strStatus;
}
}
class Palindrome_Check_Using_StringBuffer extends StringInput implements StringPalindromeIntf {
@Override
public HashMap<String, String> Palindrome(String str) {
// Logging the details of the called class and the current method name
String cName = Thread.currentThread().getStackTrace()[2].getClassName();
String mName = Thread.currentThread().getStackTrace()[1].getMethodName();
logger.info("This method " + mName + " called from the class " + cName);
if (validateInput(str)) {
StringBuffer strBuf = new StringBuffer(str);
if ((strBuf.reverse().toString()).equalsIgnoreCase(str)) {
strStatus.put(str, "yes");
} else {
strStatus.put(str, "no");
}
StringPalindromeIntf.displayMsg(str, strStatus.get(str));
} else {
strStatus.put(str, null);
StringPalindromeIntf.displayMsg(str, strStatus.get(str));
}
return strStatus;
}
}
public class StringPalindrome {
public static void main(String[] args) {
// Instantiation of the object using the class Palindrome_Check_Using_LambdaExp
Palindrome_Check_Using_LambdaExp PCUL = new Palindrome_Check_Using_LambdaExp();
PCUL.Palindrome("TESET");
PCUL.Palindrome("HowoH");
PCUL.Palindrome(null);
// Instantiation of the object using the class
// Palindrome_Check_Using_StringBuffer
Palindrome_Check_Using_StringBuffer PCUSB = new Palindrome_Check_Using_StringBuffer();
PCUSB.Palindrome("Not");
PCUSB.Palindrome(null);
PCUSB.Palindrome("SKYKS");
}
}
OUTPUT:
Mar. 16, 2024 3:37:40 P.M. migrate.Palindrome_Check_Using_LambdaExp Palindrome
INFO: This method Palindrome called from the class migrate.StringPalindrome
Mar. 16, 2024 3:37:40 P.M. migrate.StringInput validateInput
INFO: This method validateInput called from migrate.Palindrome_Check_Using_LambdaExp
Palindrome Check Completed
The String= TESET is Palindrome
Mar. 16, 2024 3:37:40 P.M. migrate.Palindrome_Check_Using_LambdaExp Palindrome
INFO: This method Palindrome called from the class migrate.StringPalindrome
Mar. 16, 2024 3:37:40 P.M. migrate.StringInput validateInput
INFO: This method validateInput called from migrate.Palindrome_Check_Using_LambdaExp
Palindrome Check Completed
The String= HowoH is Palindrome
Mar. 16, 2024 3:37:40 P.M. migrate.Palindrome_Check_Using_LambdaExp Palindrome
INFO: This method Palindrome called from the class migrate.StringPalindrome
Mar. 16, 2024 3:37:40 P.M. migrate.StringInput validateInput
INFO: This method validateInput called from migrate.Palindrome_Check_Using_LambdaExp
The given string is null
Mar. 16, 2024 3:37:40 P.M. migrate.Palindrome_Check_Using_StringBuffer Palindrome
INFO: This method Palindrome called from the class migrate.StringPalindrome
Mar. 16, 2024 3:37:40 P.M. migrate.StringInput validateInput
INFO: This method validateInput called from migrate.Palindrome_Check_Using_StringBuffer
The String= Not is not a Palindrome
Mar. 16, 2024 3:37:40 P.M. migrate.Palindrome_Check_Using_StringBuffer Palindrome
INFO: This method Palindrome called from the class migrate.StringPalindrome
Mar. 16, 2024 3:37:40 P.M. migrate.StringInput validateInput
INFO: This method validateInput called from migrate.Palindrome_Check_Using_StringBuffer
The given string is null
Mar. 16, 2024 3:37:40 P.M. migrate.Palindrome_Check_Using_StringBuffer Palindrome
INFO: This method Palindrome called from the class migrate.StringPalindrome
Mar. 16, 2024 3:37:40 P.M. migrate.StringInput validateInput
INFO: This method validateInput called from migrate.Palindrome_Check_Using_StringBuffer
The String= SKYKS is Palindrome
The link to the JUnit5 test for this solution is here – https://atomic-temporary-185308886.wpcomstaging.com/2024/03/17/string-palindrome-junittest/

Leave a comment