我需要以下代码逻辑:
这是三个字符串变量,
String s1 = "A"; String s2 = "B"; String s3 = "C";
根据给定的场景,我需要有以下输出:
- 场景#1 实际输出应该是“A / B / C”
- 场景 #2 当 s1 为空时,输出应为“B / C”
- 场景#3 当 s2 为空时,输出应该是“A / C”
- 场景 #4 当 s3 为空时,输出应该是“A / B”`
这可以使用三元运算吗?
你可以在 Guava 类 Joiner 和 Apache Commons Lang StringUtils.defaultIfBlank 的帮助下做到这一点:
Joiner.on("/").skipNulls().join(
defaultIfBlank(s1, null),
defaultIfBlank(s2, null),
defaultIfBlank(s3, null)
);
如果您需要处理任意数量的字符串,您可以将“defaultIfBlank”的三行提取到带有循环的方法中。
带有流的 java8 方式
Arrays.stream(new String[]{null, "", "word1", "", "word2", null, "word3", "", null})
.filter(x -> x != null && x.length() > 0)
.collect(Collectors.joining(" - "));
这不是一个真正的答案,因为我不会在这里使用三元运算符。
如果您需要连接字符串以删除空字符串,您可以编写一个通用函数(没有错误检查,没有优化,以它为例):
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();
}
它比“内联”版本长得多,但无论您要加入多少字符串(并且您可以更改它以使用可变数量的参数),它都可以工作。它将使您将使用它的代码比任何类型的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();
}
String ans = (s1 == null ? s2 + "/" + s3 : (s2 == null ? s1 + "/" + s3 : (s3 == null ? s1 + "/" + s2 : s1 + "/"+ s2 + "/" + s3 )));
虽然不建议使用它!太难读了!!