回文和感叹号 - Java

Palindromes and exclamation points - Java

我有一个作业要检测一个字符串是否是回文。该程序应该识别非字母数字字符并忽略大小写(例如 "a" 和 "A" 相同)。其中一个字符串是 " ! " (space, !, space, space) 并且每次我尝试将字符串中的所有内容设置为小写时,“!”由于某种原因被完全删除。我尝试了以下方法:

String string = " !  ";
string = string.replaceAll("[^a-zA-Z]+","").toLowerCase(); 
//when converted into an array, the array is empty

有办法处理这种情况吗?非常感谢!

编辑:从评论中,我才发现它说的是 "replace anything not in the alphabet"。对于那个很抱歉。我还没有学到很多关于正则表达式的知识,所以我很糟糕。

every time I try to set everything in the string to lower case, the "!" gets completely deleted for some reason.

您写道:

string = string.replaceAll("[^a-zA-Z]+","").toLowerCase();

方法String#replaceAll(documentation)将所有匹配给定正则表达式的字符替换为给定的字符,你用""(空文本)进行替换,就是你删除匹配的字符。

正则表达式

[^a-zA-Z]+

匹配 不是 a-zaz 的每个字符A-ZAZ)。 + 符号重复模式,它匹配 1 到无限多个 .

换句话说,这意味着您删除每个非字母字符。这就是为什么您的字符串在替换后为空(_ 表示 space):

Before: _!__
After:

有关正则表达式的详细信息,请查看 regex101/TNfQcO。他们逐字解释这个表达。以下是一些示例,蓝色的所有内容都匹配并将被您的表达式删除:


对于回文,请查看许多等价问题之一,例如

  • Check string for palindrome
  • Java Palindrome checker
  • Java- Palindrome Program