-1

我被困在一个任务上!请帮忙!作业要求

我们希望为我们的用户提供过滤脏话的选项。假设我们认为 cat、dog 和 llama 是亵渎的。编写一个程序,从键盘读取一个字符串并测试该字符串是否包含我们的亵渎词之一。让您的程序仅拒绝包含不雅词的行。例如,Dogmatic concatenation 是一个小类别。这句话不应被视为亵渎神明。我知道 ==0 是错误的,但是我希望它没有 cataclysm 这个词而不是亵渎,并打印出像“风暴是大灾难”这样的句子而不是亵渎

import java.util.*;

public class Profanity {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

String words;

System.out.println("Enter a sentence");
words = in.nextLine();
words = words.toLowerCase();

if (words.indexOf("cat") !=-1)
{
    if(words.length()==3)
        System.out.println("cats by itself censored!");

else if(words.indexOf("cat ")==0)
    System.out.println("cat is in the beginning censored!");
else if(words.indexOf(" cat ")!=-1)
    System.out.println("cat is in the string censored!");
else if(words.indexOf(" cat")==0); //<-- ==0 is def wrong, please help
    System.out.println("cat is at the end censored!"); }
else
    System.out.println(words);
}}
4

2 回答 2

0
else if(word.indexOf(" cat")==(word.length()-5);

应该管用。

于 2013-09-27T00:16:23.860 回答
0

您的解决方案有缺陷。它不处理标点符号," cat"也不一定匹配句子的结尾。例如 please catch the cat--catch将被匹配并忽略,但cat会通过。

您需要的是一个循环,搜索所有出现的"cat". 使用indexOf来自给定索引的搜索版本:

public int indexOf(String str, int fromIndex)

这里的想法是,每当找到匹配项时,检查它之前的字符和它之后的字符以查看它们是否是字母(使用Character.isLetter)。那是您进行边界检查的时候。然后您开始查找wordindex lastIndex + word.length(),并继续循环,直到您检查了整个字符串。

您可以将其包装在另一个循环中,这样您就不必对所有亵渎的词进行硬编码。只需将它们全部放入一个数组中,然后遍历该数组即可。

于 2013-09-27T00:22:45.900 回答