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

时间:2013-03-19 03:35:45

标签: java string

所以我在早期的帖子Java, Check if a String is a palindrome. Case insensitive中询问了阅读回文字符串的问题。

我收到了很多很棒的反馈并完成了我的作业(学到了很多东西!)但是因为它是实验室作业(大学)我不能使用建议的方法(字符串构建器)。下面的代码(至少是大纲)是我“应该”为这个赋值编写代码的,所以这不是关于方法的问题。

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

输出:

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

输入:

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 not a palindrome.

关于其余代码:

我一直在尝试几种不同的东西,所以有一些'额外'的代码,比如我不再需要使用句子.toLowerCase,可能只是使用一个扫描仪(?),但我只是想看看是否有解决标点符号问题,因为我觉得剩下的只是我能够弄明白的细节。

提前致谢!

1 个答案:

答案 0 :(得分:1)

不确定你的代码是否在整体上做正确的事情,但如果你质疑是从输入字符串中删除标点符号,那么它非常简单。

String lowerCaseInput = input.toLowerCase();
String strippedInput = lowerCaseInput.replaceAll("[^a-z]", "");

转换为小写后,replaceAll()将删除所有非小写字母。

感谢Patashu的纠正。