以下代码是否可以用更短的形式重写(也许一个语句?)
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;
}
}
更新
有没有内置方法?我不想写一个方法或复杂的句子。
答案 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);
......但我不一定称之为改进。