我需要以下代码逻辑:
这是三个String变量,
String s1 = "A"; String s2 = "B"; String s3 = "C";
我需要根据给定的方案得到以下输出:
这是否可以使用三元操作?
答案 0 :(得分:10)
你可以在Guava类Joiner和Apache Commons Lang StringUtils.defaultIfBlank的帮助下完成:
Joiner.on("/").skipNulls().join(
defaultIfBlank(s1, null),
defaultIfBlank(s2, null),
defaultIfBlank(s3, null)
);
你可以提取三行" defaultIfBlank"如果需要处理任意数量的字符串,请使用循环方法。
答案 1 :(得分:3)
带有流的java8方式
Arrays.stream(new String[]{null, "", "word1", "", "word2", null, "word3", "", null})
.filter(x -> x != null && x.length() > 0)
.collect(Collectors.joining(" - "));
答案 2 :(得分:2)
这不是一个真正的答案,因为我在这里不会使用三元运算符。
如果你需要连接删除空字符串的字符串,你可以编写一个泛型函数(没有错误检查,没有优化,以它为例):
public static String join(String[] array, char separator) {
StringBuffer result = new StringBuffer();
for (int i = 0; i < array.length; ++i) {
if (array[i] != null && array[i].length() != 0) {
if (result.length() > 0)
result.append(separator);
result.append(array[i]);
}
}
return result.toString();
}
它比#34; inline&#34;版本,但它可以工作,无论您想要加入的字符串数量(并且您可以将其更改为使用可变数量的参数)。它会使您使用它的代码比任何类型的if
树更清晰。
这样的事情:
public static String join(char separator, String... items, ) {
StringBuffer result = new StringBuffer();
for (String item: items) {
if (item != null && item.length() != 0) {
if (result.length() > 0)
result.append(separator);
result.append(item);
}
}
return result.toString();
}
答案 3 :(得分:1)
答案 4 :(得分:0)
String ans = (s1 == null ? s2 + "/" + s3 : (s2 == null ? s1 + "/" + s3 : (s3 == null ? s1 + "/" + s2 : s1 + "/"+ s2 + "/" + s3 )));
不会建议使用它!!太难以理解!!