gpt4 book ai didi

java - 递归调用一个方法但只记录第二次?

转载 作者:行者123 更新时间:2023-12-02 03:08:23 25 4
gpt4 key购买 nike

我有一个下面的方法,它使用字符集对传递的值进行 URL 解码。

  public String decodeValue(String value, Charset charset) {
if (!Strings.isNullOrEmpty(value)) {
try {
value = URLDecoder.decode(value, charset.name());
} catch (UnsupportedEncodingException ex) {
// log error
return null;
}
}
return value;
}

现在,如果URLDecoder.decode行第一次抛出UnsupportedEncodingException,那么我想针对以下三行运行相同的:

value = value.replaceAll("%(?![0-9a-fA-F]{2})", "%25");
value = value.replaceAll("\\+", "%2B");
value = URLDecoder.decode(value, charset.name());

如果URLDecoder.decode行再次抛出异常,那么我将记录错误,但仅第二次并返回空值,否则返回解码后的值。

最好、最优雅的方法是什么?

最佳答案

最简单的方法是制作函数签名的私有(private)版本,其中包含一个额外的标志。

  private String decodeValue(String value, Charset charset, boolean isFirstTime) {
if (!Strings.isNullOrEmpty(value)) {
try {
value = URLDecoder.decode(value, charset.name());
} catch (UnsupportedEncodingException ex) {
if (isFirstTime) {
value = value.replaceAll("%(?![0-9a-fA-F]{2})", "%25");
value = value.replaceAll("\\+", "%2B");
return decodeValue(value, charset.name(), false);
} else {
// log error
return null;
}
}
}
return value;
}

然后,只需在第一次传递 true 并在递归调用中传递 false 即可。在函数内部,如果传递了 true,则仅执行接下来的三行。

公共(public)版本可以传递true

  public String decodeValue(String value, Charset charset) {
decodeValue(value, charset, true);
}

关于java - 递归调用一个方法但只记录第二次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41418333/

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