用Java替换QueryString中的Param

时间:2017-09-19 14:27:03

标签: java string design-patterns matcher

假设我有一个像token=1234235asdjaklj231k209a&name=sam&firname=Mahan这样的网址参数 如何用新的替换令牌的值? 我之前用模式和匹配器做了类似的事情,但我现在不记得了 但我知道有办法这样做 更新:令牌可以包含任何字母,但& 提前谢谢

3 个答案:

答案 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());