gpt4 book ai didi

java - 从查询字符串中过滤参数(使用 Guava ?)

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:57:23 25 4
gpt4 key购买 nike

接受这个 HTTP 查询字符串:

foo=fooValue&bar=barValue&phleem=phleemValue

或者这个:

bar=barValue&phleem=phleemValue&foo=someOtherFoo

删除 foo 参数的最佳方法是什么?

欢迎所有 Java 解决方案,但首选 Guava。

(没有可用的 ServletContext,因此 Servlet 方法无济于事)

更新:该方法应处理多个要删除的参数。

最佳答案

这不是最优雅的解决方案,但可以按预期工作:

private String removeParameter(String string, final String parameterName) {
List<String> list = newArrayList(string.split("&"));

Collection<String> filtered = Collections2.filter(list, new Predicate<String>() {
public boolean apply(String s) {
return !s.startsWith(parameterName + "=");
}
});

return Joiner.on("&").join(filtered);
}

更新

处理多个参数:

@Test
public void removesMultipleParametersFromQuery() throws Exception {
String result = removeParameters("foo=fooValue&zee=lalal&bar=barValue&phleem=phleemValue", "foo", "bar");
assertThat(result, is("zee=lalal&phleem=phleemValue"));
}

private String removeParameters(String query, final String...parameterNames) {
List<String> list = newArrayList(query.split("&"));
return Joiner.on("&").join(filter(list, startsWithAnyOf(parameterNames)));
}

private Predicate<String> startsWithAnyOf(final String[] parameterNames) {
return new Predicate<String>() {
public boolean apply(String s) {
return !Iterables.any(newArrayList(parameterNames), isPrefixOf(s));
}
};
}

private Predicate<String> isPrefixOf(final String string){
return new Predicate<String>() {
public boolean apply(String candidate) {
return string.startsWith(candidate);
}
};
}

关于java - 从查询字符串中过滤参数(使用 Guava ?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4596196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com