首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中测试返回的字符串是否为空的最佳方法

在Java中测试返回的字符串是否为空的最佳方法
EN

Stack Overflow用户
提问于 2011-06-15 03:59:57
回答 6查看 217关注 0票数 3

我有一个连接一组字符串的函数,如下所示:

代码语言:javascript
复制
StringBuffer sb = new StringBuffer();

sb.append(fct1());
sb.append(fct2());
sb.append(fct3());

其中fct1()、fct2()和fct3()应该返回一个字符串。问题是我必须像这样测试返回值:

代码语言:javascript
复制
sb.append(fct1() == null ? "" : fct1());

因为如果值为空,我会得到一个异常。

问题是我有很多这样的指令,最重要的是,我不能修改这些返回字符串(fct1、fct2和fct3)的函数。

有没有能自动“清理”我的字符串的解决方案?

谢谢。

PS:我创建了一个可以做到这一点的函数:

代码语言:javascript
复制
public String testNullity(String aString){
aString == null ? "" : aString;
}

所以我可以这样叫它:

代码语言:javascript
复制
sb.append(testNullity(fct1));
sb.append(testNullity(fct2));
...
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-06-15 04:05:36

另一种选择可能是

代码语言:javascript
复制
 public class SafeStringBuilder  {
    private StringBuilder builder = new StringBuilder();

    public SafeStringBuilder append(String s) {
        if (s != null) 
            builder.append(s);
        return this;
    }
 }
票数 4
EN

Stack Overflow用户

发布于 2011-06-15 04:10:49

如果您不介意引入依赖项,可以使用GuavaJoiner而不是StringBuffer

代码语言:javascript
复制
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。同样的接口,更好的性能。

票数 1
EN

Stack Overflow用户

发布于 2011-06-15 04:04:22

除了缩短方法名之外,没有任何方法可以使此解决方案变得更简单。(可能有一种使用面向方面编程的解决方案,但总的来说,我并不认为它更简单。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6349345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档