我有一项任务,我应该检测一个字符串是否是回文。该程序应该识别非字母数字字符并忽略大小写(例如," a"和" A"是相同的)。其中一个字符串是" ! "
(空格,!,空格,空格),每次我尝试将字符串中的所有内容都设置为小写字母时,"!"由于某种原因被完全删除。我尝试过以下方法:
String string = " ! ";
string = string.replaceAll("[^a-zA-Z]+","").toLowerCase();
//when converted into an array, the array is empty
有办法处理这种情况吗?非常感谢!
编辑:从评论中,我发现它说"替换不在字母表中的任何内容"。对于那个很抱歉。我还没有学到很多关于正则表达式的知识,所以我很糟糕。
答案 0 :(得分:1)
每当我尝试将字符串中的所有内容设置为小写时,"!"由于某种原因被完全删除。
您写道:
string = string.replaceAll("[^a-zA-Z]+","").toLowerCase();
方法String#replaceAll
(documentation)替换给定字符匹配给定正则表达式的所有字符,使用""
(空文本)进行替换,即删除匹配字符。
正则表达式
[^a-zA-Z]+
匹配不 a-z
(a
至z
)或 A-Z
({{ 1}}到A
)。 Z
符号重复该模式,它匹配 1到无限多。
在单词中,这意味着您删除每个非字母字符。这就是为什么你的字符串在替换后是空的(+
表示_
):
space
有关正则表达式的详细信息,请查看regex101/TNfQcO。他们逐字解释表达。以下是一些示例,蓝色的所有内容都匹配,并将被您的表达式删除:
对于回文,请查看许多等同的问题之一,如