首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >亵渎过滤器:关于如何使它识别_only_数组中的值,我需要一些帮助。

亵渎过滤器:关于如何使它识别_only_数组中的值,我需要一些帮助。
EN

Stack Overflow用户
提问于 2017-02-24 19:19:56
回答 1查看 398关注 0票数 1
代码语言:javascript
复制
    /*

    Profanity Filter:
    - Cat
    - Dog
    - LLama
    - Has to differ cases, like cAt
    - Has to differ words that contain the words to be filtered, "Cataclysm", for example. Hello, World of Warcraft.

*/

import java.util.Scanner;

public class ProfanityFilter
{
    public static void main (String[] args)
    {
        Scanner kb = new Scanner(System.in);
        String userInput, toLowerCase;
        boolean flag = false;
        int i;
        String[] list = new String[12];
        list[0] = "cat";
        list[1] = " cat";
        list[2] = "cat ";
        list[3] = " cat ";
        list[4] = "dog";
        list[5] = " dog";
        list[6] = "dog ";
        list[7] = " dog ";
        list[8] = "llama";
        list[9] = " llama";
        list[10] = "llama ";
        list[11] = " llama ";

        System.out.println("Enter a string:");
        userInput = kb.nextLine();
        toLowerCase = userInput.toLowerCase();

        for (i = 0; i < list.length; i++)
        {
            if(toLowerCase.contains(list[i]) | toLowerCase.equals(list[i]))
            {
                flag = true;
            }
        }

        if (flag)
        {
            System.out.println("Something you said is forbidden.");
        }
        else
        {
            System.out.println("Nothing was found");
        }
    }
}

我只是很难找到我需要的合适的例外。我知道我已经很接近了,但是在尝试了许多小时来解决这个问题之后,我也很累了,并且没有一个为我需要的实例(数组中的实例)返回true的解决方案。你能指出我在这里做错了什么或者没有正则表达式的正确的解决方案吗?

我已经尝试了一个中断;在我将布尔标志转换为true (但它没有工作)之后,它一直在迭代,因此输出仍然是false。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-24 19:41:35

以下是一个潜在的解决方案:

代码语言:javascript
复制
public class Class {
  private static final String[] profaneWords = {
    "cat",
    "dog",
    "llama"
  };

  public static void main(String... args) {
    System.out.println(isProfane("this is some user input."));
    System.out.println(isProfane("this is some user input containing the dirty word 'Cat'."));
    System.out.println(isProfane(" cat "));
    System.out.println(isProfane("Cat"));
  }

  private static boolean isProfane(final String input) {
    for (final String profanity : profaneWords) {
      if (input.toLowerCase().contains(profanity)) {
        return true;
      }
    }
    return false;
  }
}

下面是一个流java8版本:

代码语言:javascript
复制
import java.util.Arrays;

public class Class {
  private static final String[] profaneWords = {
    "cat",
    "dog",
    "llama"
  };

  private static boolean isProfane(final String input) {
    return Arrays.stream(profaneWords)
      .anyMatch(input.toLowerCase()::contains);
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42446637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档