2

下面的代码是否可以用更短的形式重写(可能是一个语句?)例如 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;
                        }
                } 

更新:

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

4

6 回答 6

2

你可能想试试番石榴木匠

于 2012-09-19T05:27:02.350 回答
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)

于 2012-09-19T06:46:30.523 回答
1
String ab = (a != null && !a.isEmpty() ? a : "")
          + (a != null && b != null && !a.isEmpty() && !b.isEmpty() ? "-" : "")
          + (b != null && !b.isEmpty() ? b : "");

我很确定如果一个字符串为 null 并且您没有明确检查它,那么输出将与字符串包含 string 相同"null"

此外,使用 + 附加字符串通常等同于使用 StringBuilder,但不那么冗长。您可以通过编写一个简单的示例,将其编译为类文件并反编译来验证这一点(大多数反编译器不会费心用 + 语法替换 StringBuilders)

于 2012-09-19T05:25:39.887 回答
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 : "";
}
于 2012-09-19T05:59:49.173 回答
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", "-"));
于 2012-09-19T05:27:42.563 回答
0

这是更少的代码:

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

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

于 2012-09-19T05:54:36.180 回答