2017-02-24 6 views
1
/* 

    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を返すソリューションが空になるまで、多くの時間をかけて疲れました。私がここで間違っていることや、正規表現がない適切な解決策に私を指摘できますか?欲求不満フィルタ:配列の値を_only_にする方法について助けが必要なだけです。

私はすでに休憩を試みました。ブール値フラグをtrueに設定してもうまくいきませんでしたが、iteratingを続けるので、出力はfalseのままです。

ありがとうございます!ここで

+1

あなたが起こることを望んで言わなかったが、私はあなただけしたい推測している:ここで

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のバージョンがありますキーワード 'break;'を使用してください。 –

+1

私はあなたが '休憩 'を探していると思います。 – azurefrog

+0

何か、私は休憩を使用しようとしました。フラグがtrueになった後は配列全体を繰り返し処理し、他の値をチェックするときにフラグをfalseにします。 –

答えて

2

は、潜在的なソリューションです。

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); 
    } 
} 
関連する問題