我如何分离一个字符串,以便“猫!”将是“猫!”

时间:2011-09-18 20:21:15

标签: java string if-statement

我相信这个程序适用于大多数情况,除了一个。我在indexOF()中添加了空格,所以像cathrine和dogsuit lammas这样的词都会被接受为非亵渎。我看到的唯一问题是用户是否用cat / dog / llama开始行。猫!会显示为非亵渎,因为在开始时没有空间,之后没有空间,是否有一个String命令可以将事情分散开来,还是我完全走错了路?

import java.util.Scanner;
public class ProfanityFilter 
{

 public static void main(String[] args) 
 {

   System.out.println (" welcome to the Profanity filter billboard service ");
   System.out.println (" please enter  a potential sign that contains the words \"cat\", \"dog\" or \"llama\"" );

   Scanner keyboard = new Scanner (System.in);

   String s1 = keyboard.nextLine();

   s1 = s1.toLowerCase();

   if (s1.indexOf(" cat ")!=-1 || s1.indexOf(" dog ") !=-1 || s1.indexOf(" llama ")!=-1)

         System.out.println ("Profanity is in your Billboard");
   else
        System.out.println ("There is no profanity in your Billboard");

 }
}

4 个答案:

答案 0 :(得分:4)

正规救援!

if (s1.matches("^.*\\b(cat|dog|llama)\\b.*$"))

一些解释:

  • \b表示字边界
  • (a|b|c)表示“a或b或c”

您可以从数组中构造它:

String[] badWords = {"cat", "dog", "llama"};
String regex = "^.*\\b(" + 
    Arrays.toString(badWords).replace(", ", "|").replace("[", "").replace("]", "") + 
    ")\\b.*$";

答案 1 :(得分:2)

查看Pattern课程和\b,这意味着字边界。

答案 2 :(得分:1)

您应该使用regular expressions

答案 3 :(得分:0)

你可以这样做,它也适用于“猫”和“马,猫和山羊”。

if(Regex.IsMatch(s1, @"\b(?:cat|dog|llama)\b", RegexOptions.IgnoreCase))
    System.out.println("Profanity is in your Billboard");

好吧,我认为它是C#,但Java中存在类似的东西。