结题思路
1、先删除非字母和非数字,过滤字符串。可以使用character类中的isLetterOrDigit(ch)来检测字符ch是否是字母或数字
2、判断是否为回文串,可以用StringBuilder.reverse();来将过滤后的字符串倒置,再拿来比较来个两者是否相等。
import java.util.Scanner;
public class PalindromeIgnoreNonaAlphanumeric {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String s = input.nextLine();
System.out.print(s+" a palindrome? "+ isPlindrome(s));
input.close();
}
public static boolean isPlindrome(String s) {
String s1 = filter(s);
String s2 = reverse(s1);
return s2.equals(s1); //比较两者是否相等,并返回比较的结果
}
//创建一个过滤器,用来过滤非字母和非数字。
public static String filter(String s) {
StringBuilder stringBuilder = new StringBuilder();
for(int i = 0;i<s.length();i++) { //将导入的子串s一个一个字符检测,如果是字母或者数字,则加到新字符串中
if(Character.isLetterOrDigit(s.charAt(i))) {
stringBuilder.append(s.charAt(i));
}
}
return stringBuilder.toString();
}
//创建一个字符串倒置器,
public static String reverse(String s) {
StringBuilder stringBuilder = new StringBuilder(s);
stringBuilder.reverse();
return stringBuilder.toString();
}
}