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

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

2回目の試行:

if (match = true)

一致を true と比較せず、一致フラグを true に設定します。これにより、結果は常に true になります。

あなたのifのフラグを比較してください:

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

これには、単純な正規表現ベースのソリューションを使用できます

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

使ってみて

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 に答える
0

使用していない理由はありますString.indexOf(String)か?

もう 1 つの問題は、同じ (非常に大規模な) 撹拌に対してこれを繰り返し行う場合、サフィックス ツリーなどのより洗練されたアルゴリズムを調べたり、 Apache Luceneなどの特殊なソフトウェアを使用したりすることです。

于 2013-04-25T13:17:51.160 に答える