0

このような文字列クエリがあります

{"query":{"bool":{"should":[{"terms":{"user.id":[#users_to_follow]、 "minimum_match":1}}、{"terms":{"tweets" :[#keywords_to_track]、 "minimum_match":1}}]}}、 "filter":{"range":{"publishedDate":{"from":#Unix_timestamp}}}、 "size":#sizelength} "

次を使用して、クエリ内の特定の文字列を別の文字列に置き換えようとしています。

query.replace("#users_to_follow",usersToFollow);
query.replace("#keywords_to_track", keyworsToTrack);
query.replace("#Unix_timestamp","1325930428000" );
query.replace("#sizelength",Integer.toString(SMLApplicationProperties.ES_RESULTSET_SIZE));

ただし、これを実行しても、クエリから指定された文字列は実際には置き換えられません。

4

3 に答える 3

5

Stringクラスは不変であることを理解する必要があります。Stringに対する操作はすべて、新しいStringを返します。クエリ変数に割り当てる必要があります。

query = query.replace("#users_to_follow",usersToFollow); 
query = query.replace("#keywords_to_track", keyworsToTrack); 
query = query.replace("#Unix_timestamp","1325930428000" ); 
query = query.replace("#sizelength",Integer.toString(SMLApplicationProperties.ES_RESULTSET_SIZE));
于 2012-07-06T08:39:40.290 に答える
2

操作の結果を取得する必要がありreplaceます:

query = query.replace("#users_to_follow",usersToFollow);

これquery.replaceは、渡す文字列を変更せずに、新しい文字列を作成して返すためです(Javaの文字列は不変です)。

于 2012-07-06T08:38:33.740 に答える
0

あなたは最適化することができます(誰もが受け入れているわけではありません):

String query = query.replace("#users_to_follow",usersToFollow).replace("#keywords_to_track", keyworsToTrack).replace("#Unix_timestamp","1325930428000" ).replace("#sizelength",Integer.toString(SMLApplicationProperties.ES_RESULTSET_SIZE));
于 2012-07-06T08:49:07.587 に答える