我想知道使用Java 8有更快和/或更优雅的方法来实现这一目标。我想拥有一个不超过最大长度(例如4个字符)
的字符串input "" -> ""
input null -> null
input abc -> abc
input abcde -> abcd
some function (string s){
if(s==null)
return null;
if(s.length()>4)
return s.substring(1,4);
return s;
}
如果您不介意拉出外部依赖性,则Apache Commons stringutils充满了方便的辅助方法,这些方法完全可以执行此类操作,包括Null/Rength Safe Safe Substring。P>
https://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/commons/commons/lang3/stringutils.html.s.html#substring(java.lang.lang.string,int)
我个人在纯Java项目中发现,为无数助手使用Apache Commons几乎总是有益的。
上面说的是,您的代码很容易阅读,因此我不会竭尽全力更改它。
如果字符串不是null
,则可以始终在0
和4
和字符串长度之间的最小值之间进行子字符串。将此与Java 8的Optional
搭配,您可以在单个语句中执行此操作:
private static String noMoreThanFour(String str) {
return Optional.ofNullable(str)
.map(s -> s.substring(0, Math.min(4, s.length())))
.orElse(null);
}
1更少的返回语句保留if-else结构
if(s==null || s.length()<=4){
return s;
}else return s.substring(0,4);
另一个词干是使用条件表达式,但它不会更可读
return (s==null || s.length()<=4)? s:s.substring(0,4)