回文和感叹号 - Java

时间:2018-01-18 16:57:42

标签: java string palindrome

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

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

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

编辑:从评论中,我发现它说"替换不在字母表中的任何内容"。对于那个很抱歉。我还没有学到很多关于正则表达式的知识,所以我很糟糕。

1 个答案:

答案 0 :(得分:1)

  

每当我尝试将字符串中的所有内容设置为小写时,"!"由于某种原因被完全删除。

您写道:

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

方法String#replaceAlldocumentation)替换给定字符匹配给定正则表达式的所有字符,使用""(空文本)进行替换,即删除匹配字符。

正则表达式

[^a-zA-Z]+

匹配 a-zaz A-Z({{ 1}}到A)。 Z符号重复该模式,它匹配 1到无限多

在单词中,这意味着您删除每个非字母字符。这就是为什么你的字符串在替换后是空的(+表示_):

space

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

regex101 screenshot showing some examples

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