package javaapplication15;
import java.util.Scanner;
public class JavaApplication15 {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter your sentence: ");
String message = keyboard.nextLine();
String[] words = {" gray "," better "," formed "," eggs "," made "," cost ",
" decide "," sequence "," crap "," have "," two "," six "};
if(message.toLowerCase().contains(words))
System.out.println("Sentence contains profanity");
else
System.out.println("Sentence does not contain profanity");
}
}
我需要代码来检查数组中的单词。如果句子有骰子而不是废话,它应该没有显示亵渎。我的问题是if
声明。我试图将数组名称单词与contains一起使用,但是说了一些关于charsequence的内容。
答案 0 :(得分:2)
由于选中单词两侧的额外空格,您的解决方案仅适用于可能输入的一小部分。你应该首先想出一个不需要它的聪明方法。
对于这样的问题,我会使用HashSet。首先,我们对亵渎词进行哈希,然后我们对已解析的输入句进行哈希并检查冲突:
import java.util.HashSet;
import java.util.Scanner;
public class ProfanityChecker
{
public static void main(String[] args)
{
String[] profanityWords = {"gray","better","formed", "eggs","made",
"cost","decide","sequence","crap","have","two","six"};
Scanner keyboard = new Scanner(System.in);
String inputSentence = keyboard.nextLine();
if(checkForProfanity(profanityWords, inputSentence))
System.out.println("Yes");
else
System.out.println("No");
}
private static boolean checkForProfanity(String[] profanityWords, String inputSentence)
{
HashSet<String> profanityHash = new HashSet<>();
for(String word : profanityWords)
profanityHash.add(word);
String[] words = inputSentence.split("\\s+");
for(String word : words)
if(!profanityHash.add(word))
return true;
return false;
}
}
这样,它也可以更快地工作(m + n vs m * n)。在现实生活中,你会有一本亵渎语言词典(size-m,200-300)和一篇要扫描的长篇文章(size-n,比方说10000)。使用一个好的算法很重要。
你还可以做一些改进,比如预处理inputSentence来清理特殊字符(。,!?*),或者处理单词而不使用split,这样它甚至可以应付更大的输入频谱,更快。
我希望它有所帮助。我相信考虑细节是好事。
答案 1 :(得分:1)
我猜测(从包名中)这是一个学习练习。
所以,这里有一些提示可以帮助你入门:
将输入行拆分为单词。查看javadoc中的String.split
方法....
如果您将文本拆分为单词,则更容易匹配它们。 (你不需要做复杂的事情来区分完整的单词和部分单词;例如&#34; Scunthorpe&#34;问题。)
words
数组中单词之前/之后的空格没有帮助。即使你没有将文本分成单词,也要考虑当你的文本的第一个单词是&#34; Gray&#34; ......前面没有空格。
答案 2 :(得分:0)
你需要循环你的单词数组
boolean isRude = false;
for (String oneword : words) {
if(message.toLowerCase().contains(oneword)) {
isRude = true;
break;
}
}
if (isRude)
System.out.println("Sentence contains profanity");
else
System.out.println("Sentence does not contain profanity");
在这个例子中,我使用布尔来捕获是否存在亵渎,然后在循环之后将其打印出来。
另一种方法是使用String.split将句子拆分成单词,然后比较单词到单词。这意味着你不需要填空亵渎的单词。