0

我正在尝试在数组中搜索从句子中的单词中获得的几个特定字符串。最终这句话将由用户输入,但我现在已经硬编码了它以使测试更容易。如果程序找到字符串,它应该返回“是”,如果没有,则返回“否”。问题是我一直都在接受。

public class main {
public static void main(String[]args)
{

    String Sentence = "This is a sentence";
    String[] CensorList =
        {"big","head"};

    String[] words = Sentence.split(" ");
    System.out.println(words.length);
    boolean match = false;

    for(int i = 0; i < words.length; i++)
    {
        for (int j = 0; j < CensorList.length; j++)
        {
            if(words[i].equals(CensorList[j]))
            {
                match = true;
        }else{
            match = false;
        }
    }

    }
    if (match = true){
        System.out.println("Yes");}
    else{
        System.out.println("No");
}

} }

我非常感谢您对此提供的任何帮助,在此先感谢。

4

6 回答 6

2

第二个 for() 中的 if 有错误的大括号。

试试这个:

for (int j = 0; j < CensorList.length; j++)
{
    if(words[i].equals (CensorList[j])) {
        match = true;
        System.out.println("Yes");
    } else {
        System.out.println("No");
    }
    match = false;
}

第二次尝试:

if (match = true)

不将 match 与 true 进行比较,它将 match 标志设置为 true,结果始终为 true。

比较 if 中的标志:

if (match == true) // or simply if (match)
{ .... 
于 2013-04-25T13:18:02.573 回答
1

试试看:

for(int i = 0; i < words.length; i++)
{
    for (int j = 0; j < CensorList.length; j++)
    {
        if(words[i].equals (CensorList[j])) 
            match = true;
    }
            if (match) {
                System.out.println("Yes"); }
            else {
                System.out.println("No"); }
            match = false;
}
于 2013-04-25T13:18:40.527 回答
1

我想你这里有一些错别字。

    for (int j = 0; j < CensorList.length; j++)
    {
           if(words[i].equals (CensorList[j]));
    }

这基本上不会做任何事情,因为如果表达式被评估为 true,则 if 无关紧要。然后在循环之后将 match 设置为 true,因此它始终为 true,并且始终打印“Yes”

于 2013-04-25T13:19:22.863 回答
1

您可以为此使用一个简单的基于 RegEx 的解决方案

private static boolean test(String value) {
    String[] CensorList = { "This", "No" };

    for (String string : CensorList) {
        Pattern pattern = Pattern.compile("\\b" + string + "\\b", Pattern.CASE_INSENSITIVE);
        if (pattern.matcher(value).find()) {
            return true;
        }
    }
    return false;
}

然后

String string = "This is a sentence";
if(test(string)){
    System.out.println("Censored");
}
于 2013-04-25T13:20:45.337 回答
0

您不使用的任何原因String.indexOf(String)

另一个问题是,如果您为相同的(非常大的)搅拌重复执行此操作,在这种情况下,您可能需要研究更复杂的算法,如后缀树,甚至使用Apache Lucene等专用软件

于 2013-04-25T13:17:51.160 回答
0

尝试使用

public class main {
public static void main(String[]args)
{

    String Sentence = "This is a sentence";
    String[] CensorList =
        {"This","No"};

    String[] words = Sentence.split(" ");
    System.out.println(words.length);
    boolean match = false;

    for(int i = 0; i < words.length; i++)
    {
        for (int j = 0; j < CensorList.length; j++)
        {
            if(words[i].compareTo(CensorList[j])==0)
            {
                System.out.println("Yes");
            }
            else{System.out.println("No");}

        }
    }

}
于 2013-04-25T13:20:04.003 回答