Java 回文测试器差

Java 回文测试器差,java,Java,我正在做回文测试,但我不知道如何去掉标点符号。程序运行的目的是显示像bob和Yeettey这样的单词是回文,但不承认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 * */ publ

我正在做回文测试,但我不知道如何去掉标点符号。程序运行的目的是显示像bob和Yeettey这样的单词是回文,但不承认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");
    }

    }


}

您已经尝试忽略此行中的标点符号

word = word.replaceAll("\\s+", "");
其中\s+匹配任何空格。相反,您可能希望匹配任何非字母的字符

幸运的是,这只是一个快速的正则表达式更改:

word = word.replaceAll("[^A-Za-z]+", "")
替换所有小写和大写字母的否定集合中的任何内容;e、 不是字母的一切

如果您想要不同的行为,例如,希望其他一些字符作为回文中的字符计数,您可以将它们添加到集合中,例如,[^a-Za-z0-9]允许数字通过,如果您想要,[^a-Za-z\\-]将允许破折号通过。

适用于我输入一个单词:m-a-m该单词是回文您已经在使用word.replaceAll\\s+,以清除空白输入;如果你想忽略所有的标点符号,你只需要再用力一点。。。。请尝试word.replaceAll\\W*;这将删除所有非单词字符—单词字符是字母a-Z或a-Z、数字0-9或下划线33;。