如何在字符串数组中搜索特定字符串

时间:2013-04-25 13:15:05

标签: java arrays

我正在尝试在数组中搜索一些特定字符串,这些字符串来自句子中的单词。最终这个句子将由用户输入,但我现在已对其进行硬编码以使测试更容易。如果程序找到字符串,则应返回“是”,如果不是则返回“否”。问题是我一直都是肯定的。

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");
}

} }

我非常感谢您对这一方面的任何帮助,提前致谢。

7 个答案:

答案 0 :(得分: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)

不匹配true,它将match标志设置为true,结果始终为true。

比较你的if:

中的标志
if (match == true) // or simply if (match)
{ .... 

答案 1 :(得分: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;
}

答案 2 :(得分:1)

我认为你在这里有一些错别字。

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

这基本上什么都不做,因为如果表达式被评估为true,则if无关。然后在循环之后将匹配设置为true,所以它始终为true,并且始终打印“是”

答案 3 :(得分: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");
}

答案 4 :(得分:0)

包含功能可能就是答案:

str1.toLowerCase().contains(str2.toLowerCase())

答案 5 :(得分:0)

您没有使用String.indexOf(String)的任何原因?

另一个问题是如果你在相同(非常大)的搅拌中反复这样做,在这种情况下,你可能想要研究更复杂的算法,如suffix trees,甚至使用像Apache Lucene这样的专业软件

答案 6 :(得分: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");}

        }
    }

}