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
因此是除这些字符之外的任何字符