Как я понимаю, вы используете c>=0&&c<=9
для проверки c
для di git. Это неправильно, потому что '0' == 48
и '9' == 57
, и вы должны использовать c> = 48 && c <= 57 </p>
И я хочу дать вам несколько комментариев о вашем коде :
- Строка - это неизменяемый объект в java, и много конкатенации строк - очень плохая практика. Пожалуйста, используйте StringBuilder.
- Вы можете использовать
s.isEmpty()
вместо s==""
Character
класс имеет stati c методы isDigit
и isAlphabetic
, в то время как c являются проверками char для ди git или алфавит c - Если вы будете использовать StringBuilder, вы можете инвертировать строку просто
stringBuilder.reverse()
методом - В конце метода вы вернете true, если
s1.equals(s2)
и ложь - чрезмерно. Вы можете просто использовать return s1.equals(s2);
- И вы можете перебирать строку с
for (char c : s.toCharArray())
цикл
И окончательный код будет
public static boolean isPalindrome(String s)
{
s=s.trim();
s=s.toLowerCase();
if(s.isEmpty())
return true;
StringBuilder sanitizedString = new StringBuilder();
for (char c : s.toCharArray()) {
if(Character.isAlphabetic(c) || Character.isDigit(c))
sanitizedString.append(c);
}
String s1 = sanitizedString.toString();
String s2 = sanitizedString.reverse().toString();
return s1.equals(s2)
}
И вы можно использовать регулярное выражение из ответа @RR_IL для избежания цикла.