If语句可检测字符串中的某些单词

时间:2018-06-28 01:45:50

标签: java if-statement

我正在尝试编写一个Java程序来检测字符串中的特定单词,这些单词被视为“亵渎单词”。用户输入一个字符串,该程序应在屏幕上显示检测到亵渎单词的画面,因为它应打印没有检测到亵渎单词的画面。对于该程序,亵渎词是“猫”,“狗”和“美洲驼”。如果这些单词大写,则程序应检测到它们。它不应将包含亵渎单词的单词识别为亵渎单词。例如:猫或猫不是亵渎的。

我编写了一个程序,该程序可以运行并相应地检测亵渎单词。但是,它同时将“检测到亵渎词”和“未检测到亵渎词”打印到屏幕上。我正在努力弄清楚如何才能打印出实际上是亵渎单词的亵渎单词。

import java.util.Scanner;

public class Ch3_Programming_Project3 {

    public static void main(String[] args) {

        Scanner keyboard=new Scanner(System.in);

        boolean startProgram=true; 

        System.out.println("The words cat, dog, and llama are considered"
                  +" profane and will not be allowed.");

        if (startProgram== true) {

            System.out.println("Please enter a sentence:");
            String sentence=keyboard.next();
            sentence=sentence.toLowerCase();

            boolean cat=true, dog=true, llama=true;

            if (sentence.contains("cat")) {
                cat=true;
            }

            if (sentence.contains("dog")) {
                dog=true;
            }

            if (sentence.contains("llama")) {
                llama=true;
            } else {
                System.out.println("No profanity detected." + " Sentence approved.");
            }

            if (cat==true || dog==true || llama==true) {

                if (cat == true) {
                    if (cat==true&&dog==true&&llama==true) {
                        System.out.println("Profanity detected");
                        System.exit(0);
                    } else if (cat==true && dog==true) {
                        System.out.println("Profanity detected");
                        System.exit(0);
                    } else if (cat==true && llama==true) {
                        System.out.println("Profanity detected");
                        System.exit(0);
                    } else {
                        System.out.println("Profanity detected");
                        System.exit(0);
                    }    
                }

                if (dog == true) {
                    if (dog==true && llama==true) {
                        System.out.println("Profanity detected");
                        System.exit(0);
                    } else {
                        System.out.println("Profanity detected");
                        System.exit(0);
                    }                     
                }

                if (llama == true) {
                    System.out.println("Profanity detected");
                    System.exit(0);
                }
            }
        } else if (startProgram == false) {
            System.exit(0);
        } else {
            System.out.println("Program was force closed.");
            System.exit(0);
        }
        System.exit(0);
    }//end main
}//end class

我对Java非常陌生,并且真的想学习。是的,这是一项家庭作业。但是我已经提交了它,并且在这里试图了解我的错误所在并学习。我曾尝试使用Google搜索和搜索其他帖子来确定我的问题,但没有成功。

在此先感谢您能帮助我的人。

3 个答案:

答案 0 :(得分:2)

通过拆分句子并将不良词存储在@media中,可以大大简化代码。

List

修改

输出

    List<String> pwords = Arrays.asList(new String []{"dog", "cat", "llama"});

    String str = "it is raining a cat and a dog";
    // or accept from keyBoard
    //System.out.println("Please enter a sentence:");
    // String str = keyboard.nextLine();
    // str = str.toLowerCase();

    System.out.println(str);
    String [] arr = str.split("\\s+");
    for (String w : arr) {

        if (pwords.contains(w)) {
            System.out.println("contains profanity");
            return;
        }
    }
    System.out.println("a clean sentence");

答案 1 :(得分:1)

您的程序过于复杂,可以大大简化。

首先,您的所有if/else语句都可以简化为一个。另外,正如Scary Wombat在评论中指出的那样,您应该使用keyboard.nextLine()来获取用户的输入。

这是为您提供的Main方法的新代码:

public static void main(String[] args) {

    Scanner keyboard = new Scanner(System.in);

    System.out.println("The words cat, dog, and llama are considered"
            + " profane and will not be allowed.");

    System.out.println("Please enter a sentence:");
    String sentence = keyboard.nextLine();
    sentence = sentence.toLowerCase();

    boolean foundProfane = false;
    if (sentence.matches(".*\\bcat\\b.*")
            || sentence.matches(".*\\bdog\\b.*")
            || sentence.matches(".*\\bllama\\b.*")) {
        foundProfane = true;
    }

    if (foundProfane) {
        System.out.println("Profanity Detected!");
    } else {
        System.out.println("No profanity detected!");
    }

}

字符串中的.*\\b\\b.*仅允许捕获完整的单词,因此例如在输入“目录”时将不会对其进行标记。

仅使用一个boolean来跟踪是否添加了亵渎性单词,就可以将所有检查都保留在一个位置,如果发现一个顽皮的单词,只需翻转boolean

此外,我删除了整个startProgram结构,因为它对程序完全没有影响。

注意:可以进行其他一些改进,但是由于您刚开始使用Java,因此这仍应与您当前的技能水平保持一致。祝您编码愉快!

答案 2 :(得分:0)

因此,通过检查String是否包含亵渎单词并然后有标记来指示它是否包含亵渎单词来启动程序。好的方法。

但是之后。

如果三个标志中的任何一个为true:System.out.println("Profanity detected"); System.exit(0);

如果dog为真:System.out.println("Profanity detected"); System.exit(0);

如果两个标志之一为真:System.out.println("Profanity detected"); System.exit(0);

其他:System.out.println("Profanity detected"); System.exit(0);

如果cat为真:System.out.println("Profanity detected"); System.exit(0);

如果其他两个标志中的任何一个为true:System.out.println("Profanity detected"); System.exit(0);

我要在那儿停下来,但我想你明白我的意思了。基本上,您if-else网中的每个分支都可以达到相同的目的。您需要巩固它。您只需在第一个if-else分支中执行以下操作即可:

if(sentence.contains("llama") {
   System.out.println("Contains profane word: llama");
}
//And so on

这样,您甚至不需要标志或任何其他if-else(也需要在其他答案中指出,您需要将keyboard.next()更改为keyboard.nextLine()