gpt4 book ai didi

Java String 修剪 - 如何最小化

转载 作者:行者123 更新时间:2023-12-01 11:14:04 25 4
gpt4 key购买 nike

Java 文档说 String.trim() 返回字符串的副本。

我的方法中有以下代码,它会按照提到的方式进行修剪,并导致创建三次新字符串。

String foo = getFoo(storedProcedureResult);
if(foo !=null && !foo.trim().isEmpty()){ // --> creates new string
if(foo.trim().substring(1).equals("bar")){ // --> creates new string
} else if(foo.trim().substring(4,6).equals("bar")){ // --> creates new string
}
}

我尝试使用以下代码来最小化这种情况:

 String foo = getFoo(storedProcedureResult);
if(foo !=null && !(foo=foo.trim()).isEmpty()){ // --> creates new string only once
if(foo.substring(1).equals("bar")){
} else if(foo.substring(4,6).equals("bar")){
}
}

现在,Sonar 报告不应在子表达式内进行赋值。如何有效地减少方法中 trim 的使用?我很烦恼,因为这个方法正在生产中使用,每秒调用 250 多次,并且不应该创建更多不必要的 String 对象。

最佳答案

你可以写:

String foo = getFoo(storedProcedureResult);
if(foo != null) foo = foo.trim();
if(foo !=null && !foo.isEmpty()){
if(foo.substring(1).equals("bar")){
} else if(foo.substring(4,6).equals("bar")){
}
}

您还可以为此创建一个实用方法:

static String safeTrim(String s) {
return s == null ? null : s.trim();
}

并使用它:

String foo = safeTrim(getFoo(storedProcedureResult));

其实 Apache Commons Lang 里就有这样的方法.

更通用的解决方案是通过特殊方法将空字符串转换为空:

static String nullToEmpty(String s) {
return s == null ? "" : s;
}

并像这样使用它:

String foo = nullToEmpty(getFoo(storedProcedureResult)).trim();
if(!foo.isEmpty()){
if(foo.substring(1).equals("bar")){
} else if(foo.substring(4,6).equals("bar")){
}
}

其实Google Guava里就有这样的方法.

最后你可以使用Java-8 Optional如果您不想创建/使用非标准方法:

String foo = Optional.ofNullable(getFoo(storedProcedureResult))
.map(String::trim).orElse("");
if(!foo.isEmpty()){
if(foo.substring(1).equals("bar")){
} else if(foo.substring(4,6).equals("bar")){
}
}

关于Java String 修剪 - 如何最小化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32043241/

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