所以我正在研究一个我坚持使用的代码

时间:2013-09-27 00:07:23

标签: java filter indexof profanity

我被困在了一个分配上!请帮忙!作业要求

我们希望为用户提供过滤亵渎性语言的选项。假设我们认为猫,狗和美洲驼这两个词是亵渎的。编写一个程序,从键盘读取一个字符串,并测试该字符串是否包含我们的亵渎词。让您的程序仅拒绝包含亵渎词的行。例如,Dogmatic连接是一个小类别。这句话不应该被视为亵渎。 我知道== 0是错的但是,我希望它没有“灾难”这个词,不要亵渎并打印出一句“风暴是大灾变”而不是亵渎

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);
}}

2 个答案:

答案 0 :(得分:0)

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

应该工作。

答案 1 :(得分:0)

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

您需要的是一个循环,搜索 {/ 1>}的所有出现次数。使用从给定索引中搜索的"cat"版本:

indexOf

这里的想法是,无论何时找到匹配项,都要检查它前面的字符和后面的字符,看它们是否是一个字母(使用public int indexOf(String str, int fromIndex) )。那是你做边界检查的时候。然后,您开始在索引Character.isLetter处查找word,并继续循环,直到您检查完整个字符串。

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