我有一个连接一组字符串的函数,如下所示:
StringBuffer sb = new StringBuffer();
sb.append(fct1());
sb.append(fct2());
sb.append(fct3());其中fct1()、fct2()和fct3()应该返回一个字符串。问题是我必须像这样测试返回值:
sb.append(fct1() == null ? "" : fct1());因为如果值为空,我会得到一个异常。
问题是我有很多这样的指令,最重要的是,我不能修改这些返回字符串(fct1、fct2和fct3)的函数。
有没有能自动“清理”我的字符串的解决方案?
谢谢。
PS:我创建了一个可以做到这一点的函数:
public String testNullity(String aString){
aString == null ? "" : aString;
}所以我可以这样叫它:
sb.append(testNullity(fct1));
sb.append(testNullity(fct2));
...发布于 2011-06-15 04:05:36
另一种选择可能是
public class SafeStringBuilder {
private StringBuilder builder = new StringBuilder();
public SafeStringBuilder append(String s) {
if (s != null)
builder.append(s);
return this;
}
}发布于 2011-06-15 04:10:49
如果您不介意引入依赖项,可以使用Guava的Joiner而不是StringBuffer
Joiner j = Joiner.on("").skipNulls();
StringBuilder sb = new StringBuilder();
j.appendTo(sb, fct1());
j.appendTo(sb, fct2());
j.appendTo(sb, fct3());
String result = sb.toString();
// or even just
Joiner j = Joiner.on("").skipNulls();
String result = j.join(fct1(), fct2(), fct3());注意:一般来说,除非你需要StringBuffer的线程安全,否则你应该使用StringBuilder。同样的接口,更好的性能。
发布于 2011-06-15 04:04:22
除了缩短方法名之外,没有任何方法可以使此解决方案变得更简单。(可能有一种使用面向方面编程的解决方案,但总的来说,我并不认为它更简单。)
https://stackoverflow.com/questions/6349345
复制相似问题