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

You can optimize (not accepted by everybody) :

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 回答