假设我有一个像token=1234235asdjaklj231k209a&name=sam&firname=Mahan
这样的网址参数
如何用新的替换令牌的值?
我之前用模式和匹配器做了类似的事情,但我现在不记得了
但我知道有办法这样做
更新:令牌可以包含任何字母,但&
提前谢谢
答案 0 :(得分:5)
Spring有一个可以优雅地处理这个需求的工具。 Apache httpcomponents也是如此。下面是一个春天的例子。
import org.springframework.web.util.UriComponentsBuilder;
import java.net.URI;
public class StackOverflow {
private static class SO46303058 {
public static void main(String[] args) {
final String urlString = "https://subdomain.hostname/path/resource?token=1234235asdjaklj231k209a&name=sam&firname=Mahan";
final URI uri = UriComponentsBuilder.fromHttpUrl(urlString)
.replaceQueryParam("token", "abc")
.build().toUri();
System.out.println(uri);
}
}
}
不要害怕为项目添加依赖项,它会重新发明轮子。
答案 1 :(得分:1)
我们可以考虑做一个简单的正则表达式替换,但有几点需要注意(代码片段下方的q.v.)。
Food.aggregate([{
$group : {
_id : "$category",
items : { $push : "$name"}
}
}],function(err, result){
//result will have food items grouped by category
})
要考虑的边缘情况首先是您的String url = "token=1234235asdjaklj231k209a&name=sam&firname=Mahan";
url = url.replaceFirst("\\btoken=.*?(&|$)", "token=new_value$1");
System.out.println(url);
url = "param1=value&token=1234235asdjaklj231k209a";
url = url.replaceFirst("\\btoken=.*?(&|$)", "token=new_value$1");
System.out.println(url);
可能是查询字符串中的最后一个参数。为了涵盖这种情况,我们应该检查以结尾的token
ambersand token=...
或字符串的结尾。但是如果我们不使用前瞻,而是消耗那个ambersand,我们还必须在替换中添加它。在下面的评论中被@DodgyCodeException正确捕获的另一个边缘情况是,另一个查询参数恰好发生在&
中的 end 。为了确保我们确实匹配我们的token
参数,我们可以在正则表达式中使用单词边界作为前缀,即使用token
来引用它。
<强>输出:强>
\btoken=...
答案 2 :(得分:0)
制作一个viewModel。
public class veiwModel(){ String token ; // and get and set for exmample }
然后使用Gson,如果你有一个json文本。
Gson gson = new Gson();
yourViewModel = gson.fronJson(jsonText , viewModel.class);
System.out.println(yourViewModel.getToken());