如何缩短Java中的String连接?

时间:2012-09-19 05:20:09

标签: java string string-concatenation

以下代码是否可以用更短的形式重写(也许一个语句?) ab = something.join(a,b,"-");这可以通过Java扩展,动态语言等来实现。

                String a=....
                String b=.....
                String ab = "";
                if(a!=null && a.length()>0) {
                        ab = a;
                }
                if(b!=null && b.length()>0) {
                        if(ab.length()>0) {
                            ab =ab + "-" + b;
                        } else {
                            ab = b;
                        }
                } 

更新

有没有内置方法?我不想写一个方法或复杂的句子。

6 个答案:

答案 0 :(得分:2)

您可能想尝试Guava Joiner

答案 1 :(得分:2)

仅为此功能引入外部库可能有点过分,但请查看Apache Commons StringUtils。但您可以创建一个实用工具方法,例如:

private static String join(String delimiter, String...parts) {
    StringBuilder builder = new StringBuilder();
    for (String part: parts) {
        if (!isEmpty(part)) {
            if (builder.length() > 0) {
                builder.append(delimiter);
            }
            builder.append(part);
        }
    }
    return builder.toString();
}

private static boolean isEmpty(String part) {
    return part != null && part.length() > 0;   
}

我首先设置分隔符以允许可变数量的参数,例如 join(“ - ”,null,“b”,null,“d”,“e”,null)

答案 2 :(得分:1)

String ab = (a != null && !a.isEmpty() ? a : "")
          + (a != null && b != null && !a.isEmpty() && !b.isEmpty() ? "-" : "")
          + (b != null && !b.isEmpty() ? b : "");

我很确定如果字符串为null并且您没有显式检查它,则输出将与字符串包含字符串"null"的输出相同。

另外,使用+来附加字符串通常相当于使用StringBuilder,但不那么详细。您可以通过编写一个简单的示例,将其编译为类文件并对其进行反编译来验证这一点(大多数反编译器都不会用+语法替换StringBuilders)

答案 3 :(得分:1)

这就是我的2美分:

public boolean isEmpty(String string) {
    return string != null && !"".equals(string);
}

public String join(String a, String b, String separator) {
    if (!isEmpty(a) && !isEmpty(b)) {
        return a + separator + b;
    }
    if (!isEmpty(a)) {
        return a;
    }
    if (!isEmpty(b)) {
        return b;
    }
    return "";
}

public String joinLessObvious(String a, String b, String separator) {
    return !isEmpty(a) && !isEmpty(b) ? a + separator + b : !isEmpty(a) ? a : !isEmpty(b) ? b : "";
}

答案 4 :(得分:0)

您可以尝试StringBuilder

StringBuilder builder = new StringBuilder("");
builder.append((a != null ? a : ""))
       .append(((a != null && b != null) ? "-" : ""))
       .append((b != null ? b : ""));

您可以创建一种方法,将其用于一行:

public String join(String a, String b, String separator) {
    StringBuilder builder = new StringBuilder("");
    builder.append((a != null ? a : ""))
           .append(((a != null && b != null) ? "-" : ""))
           .append((b != null ? b : ""));
    return builder.toString();
}

然后将其称为:

System.out.println(join("Another", "Test", "-"));

答案 5 :(得分:0)

这是更少的代码:

String ta = (a == null ? "" : a);
String tb = (b == null ? "" : b);
ab = (ta.length() > 0 && tb.length() > 0) ? (ta + "-" + tb) : (ta + tb);

......但我不一定称之为改进。