2017-07-28 14 views
0

Javaでブール検索を自動変換する小さなアプリケーションを構築しています。Java:ループ上の文字列を置換する際の問題

これは、クエリ文字列に特定の単語が含まれているかどうかを調べるコードで、ある場合は、それを変換した値で置き換えます。

int howmanytimes = originalValues.size(); 

for (int y = 0; y < howmanytimes; y++) { 
    String originalWord = originalValues.get(y); 
    System.out.println("original Word = " + originalWord); 

    if (toReplace.contains(" " + originalWord.toLowerCase() + " ") 
     || toCheck.contains('"' + originalWord.toLowerCase() + '"')) { 
     toReplace = toReplace.replace(originalWord, translatedValues.get(y).toLowerCase()); 
     System.out.println("replaced " + originalWord + " with " + translatedValues.get(y).toLowerCase()); 
    } 

    System.out.println("to Replace inside loop " + toReplace); 
} 

問題は、クエリが有する、例えば、「(mykeyword OR 『青mykeyword』)」であり、翻訳の値が異なっていて、例えば、 elpalavra及び「青mykeyword」に変換mykeyword "elpalavra azul"に翻訳されています。この場合、結果文字列は '(elpalavra OR "elpalavra azul")'になるはずです(elpalavra OR "blue elpalavra")。最初のループではすべてのキーワードが置き換えられ、2番目のループでは元の値が含まれなくなりました。 これを修正するにはどうすればよいですか?

ありがとうございました

+0

1つの方法は、すべてを配列に分割し、配列をループし、キーワードが見つかった場合はそれをスキップし、それ以外の場合はスキップします。 –

+0

以前に比べてクエリを作成した後に翻訳を行う理由は何ですか? –

+0

https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/text/StrSubstitutor.htmlこれを行う良い方法かもしれません –

答えて

1

あなたは元の値をサイズdescで並べ替えることができます。その後、それらを通ってループします。 "mykeyword"を置き換えた後に初めて "blue mykeyword"を置き換えます

0

"toCheck"変数は何のために説明されていなくて、どのような場合でも使用方法が奇妙に見えます。 )。複数の単語を持つものが最初になるように、

  1. ソートあなたのoriginalValues:さておき、あなたの要求に答えるための一つの方法は、この(唯一の指定要件に基づいて)可能性があり

    キーピング。同じ数の単語を持つものは、より長いものから少ないものへと順序づけるべきです。

関連する問題