在 Java 中替换 QueryString 中的参数
Replace a Param in QueryString in Java
假设我有一个 url 参数,例如 token=1234235asdjaklj231k209a&name=sam&firname=Mahan
如何用新令牌替换令牌的值?
我以前用 pattern 和 matcher 做过类似的事情,但我现在不记得了
但我知道有办法
更新:令牌可以包含任何字母,但 &
提前致谢
制作一个视图模型。
public class veiwModel(){ String token ; // and get and set for exmample }
如果您有 json 文本,则使用 Gson。
Gson gson = new Gson();
yourViewModel = gson.fronJson(jsonText , viewModel.class);
System.out.println(yourViewModel.getToken());
我们可以考虑做一个简单的正则表达式替换,但有一些注意事项(q.v。在代码片段下方)。
String url = "token=1234235asdjaklj231k209a&name=sam&firname=Mahan";
url = url.replaceFirst("\btoken=.*?(&|$)", "token=new_value");
System.out.println(url);
url = "param1=value&token=1234235asdjaklj231k209a";
url = url.replaceFirst("\btoken=.*?(&|$)", "token=new_value");
System.out.println(url);
首先要考虑的边缘情况是您的 token
可能是查询字符串中的最后一个参数。为了涵盖这种情况,我们应该检查以 结尾的 token=...
或者 一个琥珀码 &
或字符串的结尾。但是如果我们不使用 lookahead,而是消耗那个 ambersand,我们还必须将它添加回替换中。 @DodgyCodeException 在他下面的评论中正确捕获的另一个边缘情况是 another 查询参数恰好在 end 中12=]。为了确保我们真正匹配我们的 token
参数,我们可以在正则表达式中用单词边界作为它的前缀,即使用 \btoken=...
来引用它。
输出:
token=new_value&name=sam&firname=Mahan
param1=value&token=new_value
Spring 有一个实用程序可以优雅地处理这个需求。 Apache httpcomponents 也是如此。下面是一个 spring 示例。
import org.springframework.web.util.UriComponentsBuilder;
import java.net.URI;
public class Whosebug {
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);
}
}
}
不要害怕在项目中添加依赖项,这总比重新发明轮子好。
假设我有一个 url 参数,例如 token=1234235asdjaklj231k209a&name=sam&firname=Mahan
如何用新令牌替换令牌的值?
我以前用 pattern 和 matcher 做过类似的事情,但我现在不记得了
但我知道有办法
更新:令牌可以包含任何字母,但 &
提前致谢
制作一个视图模型。
public class veiwModel(){ String token ; // and get and set for exmample }
如果您有 json 文本,则使用 Gson。
Gson gson = new Gson();
yourViewModel = gson.fronJson(jsonText , viewModel.class);
System.out.println(yourViewModel.getToken());
我们可以考虑做一个简单的正则表达式替换,但有一些注意事项(q.v。在代码片段下方)。
String url = "token=1234235asdjaklj231k209a&name=sam&firname=Mahan";
url = url.replaceFirst("\btoken=.*?(&|$)", "token=new_value");
System.out.println(url);
url = "param1=value&token=1234235asdjaklj231k209a";
url = url.replaceFirst("\btoken=.*?(&|$)", "token=new_value");
System.out.println(url);
首先要考虑的边缘情况是您的 token
可能是查询字符串中的最后一个参数。为了涵盖这种情况,我们应该检查以 结尾的 token=...
或者 一个琥珀码 &
或字符串的结尾。但是如果我们不使用 lookahead,而是消耗那个 ambersand,我们还必须将它添加回替换中。 @DodgyCodeException 在他下面的评论中正确捕获的另一个边缘情况是 another 查询参数恰好在 end 中12=]。为了确保我们真正匹配我们的 token
参数,我们可以在正则表达式中用单词边界作为它的前缀,即使用 \btoken=...
来引用它。
输出:
token=new_value&name=sam&firname=Mahan
param1=value&token=new_value
Spring 有一个实用程序可以优雅地处理这个需求。 Apache httpcomponents 也是如此。下面是一个 spring 示例。
import org.springframework.web.util.UriComponentsBuilder;
import java.net.URI;
public class Whosebug {
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);
}
}
}
不要害怕在项目中添加依赖项,这总比重新发明轮子好。