Java分隔符忽略句子末尾的标点符号

Java分隔符忽略句子末尾的标点符号,java,string,Java,String,所以我在之前的一篇文章中问过关于阅读回文字符串的问题 我收到了很多很好的反馈并做了家庭作业(学到了很多!),但由于这是一项实验室作业(大学),我无法使用建议的方法(字符串生成器)。下面的代码(至少是大纲)是我“应该”如何为这个任务编写代码的,所以这不是一个关于方法的问题 import java.util.*; public class Lab04 { public static void main(String[] args) { // declaring variables

所以我在之前的一篇文章中问过关于阅读回文字符串的问题

我收到了很多很好的反馈并做了家庭作业(学到了很多!),但由于这是一项实验室作业(大学),我无法使用建议的方法(字符串生成器)。下面的代码(至少是大纲)是我“应该”如何为这个任务编写代码的,所以这不是一个关于方法的问题

import java.util.*;

public class Lab04 {

public static void main(String[] args) {
    // declaring variables
    String sentence;
    String word;

    // initiating the scanner
    Scanner keyboard = new Scanner(System.in);

    // prompting the user for a sentence

    System.out.println("Please enter the sentence: ");
    sentence = keyboard.nextLine();
    System.out.println("Your input was: " + '"' + sentence + '"');

    // checking if it is a palindrome
    sentence = sentence.toLowerCase();
    Scanner stringScan = new Scanner(sentence);
    **stringScan.useDelimiter("[ \t\n,.-:;'?!\"] + ");**
    char leftChar, rightChar;
    boolean isPalindrome = true;

    while ( stringScan.hasNext() ) {
        word = stringScan.next();
        leftChar = word.charAt(0);
        rightChar = word.charAt(word.length() - 1);
        if (!(leftChar == rightChar))
            isPalindrome = false;   
    }

    if (isPalindrome)
        System.out.println("This is a palindrome.");
    else 
        System.out.println("This is not a palindrome.");


    // checking if it is an alliteration
    sentence = sentence.toLowerCase();
    Scanner stringScan1 = new Scanner(sentence);

    **stringScan1.useDelimiter("[ \t\n,.-:;'?!\"]+");**

    char firstChar = sentence.charAt(0);
    boolean isAlliteration = true;
    while ( stringScan1.hasNext() ) {
        word = stringScan1.next();
        if (firstChar != word.charAt(0) && word.length() > 3)
            isAlliteration = false;
    }

    if (isAlliteration)
        System.out.println("This is an alliteration.");
    else 
        System.out.println("This is not an alliteration.");
}
}
我好奇的部分是用粗体写的。我一直在谷歌上搜索并尝试使用Java文档,但我很难找到分隔符的格式是如何工作的

当前分隔符可能很乱,并且包含不必要的字符

我的目标是使分隔符忽略末尾的标点符号。它已经接近完美,但我需要找到一种方法来忽略结尾处的标点符号

例如:

输入:

Doc, note, I dissent. A fast never prevents a fatness. I diet on cod
Doc, note, I dissent. A fast never prevents a fatness. I diet on cod.
输出:

Your input was: "Doc, note, I dissent. A fast never prevents a fatness. I diet on cod"
This is a palindrome.
Your input was: "Doc, note, I dissent. A fast never prevents a fatness. I diet on cod"
This is not a palindrome.
输入:

Doc, note, I dissent. A fast never prevents a fatness. I diet on cod
Doc, note, I dissent. A fast never prevents a fatness. I diet on cod.
输出:

Your input was: "Doc, note, I dissent. A fast never prevents a fatness. I diet on cod"
This is a palindrome.
Your input was: "Doc, note, I dissent. A fast never prevents a fatness. I diet on cod"
This is not a palindrome.
关于守则的其余部分:

我一直在尝试一些不同的东西,所以有一些“额外”的代码,比如我不需要再使用句子.toLowerCase,可能只需要使用一个扫描器(?),但我只是想看看是否有一个解决标点问题的方法,因为我觉得剩下的只是我自己能够弄清楚的细节


提前谢谢

不确定您的代码总体上是否正确,但如果您的问题是关于从输入字符串中删除标点符号,那么这是非常简单的

String lowerCaseInput = input.toLowerCase();
String strippedInput = lowerCaseInput.replaceAll("[^a-z]", "");
转换为小写后,replaceAll()将删除所有非小写字母


感谢帕塔舒的更正。

我不想成为坏消息的传递者。。但是这个程序实际上并没有检查一个句子是否是回文。它检查每个单词的第一个和最后一个字符是否相同。例如,如果您键入:
abcdefga
,它会说这是一个回文。对于实际的回文检查,必须使用循环检查所有字母。或者你可以反转字符串,检查反转的字符串和原始字符串是否相同谢谢我没有意识到!我会马上修好的你肯定走对了。你必须记住,只有当每个单词都是回文时,它才会给你答案。因为你的输入是一个完整的句子,你必须检查整个句子,而不是每个单词。所以你应该读入单词并把它们放到字符串中。然后,您可以进行该计算以检查句子是否为回文。请注意,这不会删除u,因为
\w
的正则表达式定义为
[a-zA-Z0-9_u]
\w
因此是除这些字符之外的任何字符