我有一个字符串查询,看起来像这样
{ “查询”:{ “布尔”:{ “应该”:[{ “术语”:{ “user.id”:[#users_to_follow], “minimum_match”:1}},{ “术语”:{ “鸣叫”:[#keywords_to_track], “minimum_match”:1}}]}}, “过滤器”:{ “范围”:{ “publishedDate”:{ “从”:#UNIX_TIMESTAMP}}}, “尺寸”:# 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));
然而,当我运行这个东西时,它实际上并没有从查询中替换给定的字符串。
答案 0 :(得分: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));
答案 1 :(得分:2)
您需要获取replace
操作的结果:
query = query.replace("#users_to_follow",usersToFollow);
那是因为query.replace
不会改变你传递的字符串,它会构建并返回一个新字符串(java中的字符串是不可变的)。
答案 2 :(得分: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));