我正在做回文测试仪,但我不知道如何摆脱标点符号的影响。该程序运行以表明诸如“ bob”和“ yeetteey”之类的词是回文,但不知道m-a-m是回文。我如何使它工作?
import java.util.Scanner;
//this is a palindrome tester
/**
* YUHHHHHHHH YUHHHHHHH
* @author its your boi, J. BACK at it again with another programming project
*
*/
public class PalindromeTester {
public static void main(String[] args) {
//YOUR CODE HERE
String word;
int z;
int y = 0;
int i = 0;
char letter;
Scanner sc = new Scanner(System.in);
System.out.print("Enter a word: ");
word = sc.nextLine();
word = word.replaceAll("\\s+", "");
word = word.toLowerCase();
z = word.length()-1;
while (i <= z){
if ((letter = word.charAt(i)) == (letter = word.charAt(z-i))){
y += 1;
}
i += 1;
}
if (y == (z+1)){
System.out.println("The word IS a palindrome");
}
else{
System.out.println("The word is NOT a palindrome");
}
}
}
答案 0 :(得分:0)
您已经尝试用此行忽略标点符号
word = word.replaceAll("\\s+", "");
其中\s+
与任何空白相匹配。相反,您可能想要匹配不是字母的任何字符。
幸运的是,这只是RegEx的快速更改:
word = word.replaceAll("[^A-Za-z]+", "")
替换所有小写字母和所有大写字母的求反集中的所有内容;例如不是字母的一切。
如果您想要其他行为,例如如果您希望其他一些字符在回文中算作字符,则可以将其添加到集合中,例如[^A-Za-z0-9]
允许数字通过,如果需要,[^A-Za-z\\-]
可以使破折号通过。