回文测试仪

时间:2018-10-18 00:51:55

标签: java

我正在做回文测试仪,但我不知道如何摆脱标点符号的影响。该程序运行以表明诸如“ 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");
    }

    }


}

1 个答案:

答案 0 :(得分:0)

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

word = word.replaceAll("\\s+", "");

其中\s+与任何空白相匹配。相反,您可能想要匹配不是字母的任何字符

幸运的是,这只是RegEx的快速更改:

word = word.replaceAll("[^A-Za-z]+", "")

替换所有小写字母和所有大写字母的求反集中的所有内容;例如不是字母的一切。

如果您想要其他行为,例如如果您希望其他一些字符在回文中算作字符,则可以将其添加到集合中,例如[^A-Za-z0-9]允许数字通过,如果需要,[^A-Za-z\\-]可以使破折号通过。