7

我需要以下代码逻辑:

这是三个字符串变量,

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”`

这可以使用三元运算吗?

4

5 回答 5

10

你可以在 Guava 类 Joiner 和 Apache Commons Lang StringUtils.defaultIfBlank 的帮助下做到这一点:

Joiner.on("/").skipNulls().join(
  defaultIfBlank(s1, null),
  defaultIfBlank(s2, null),
  defaultIfBlank(s3, null)
);

如果您需要处理任意数量的字符串,您可以将“defaultIfBlank”的三行提取到带有循环的方法中。

于 2014-01-27T07:21:18.223 回答
3

带有流的 java8 方式

Arrays.stream(new String[]{null, "", "word1", "", "word2", null, "word3", "", null})
    .filter(x -> x != null && x.length() > 0)
    .collect(Collectors.joining(" - "));
于 2017-01-11T13:54:08.953 回答
2

你可以做:

result = ((s1==null)?"":(s1+"/"))+((s2==null)?"":(s2+"/"))+((s3==null)?"":s3);

看见

于 2012-05-14T08:25:37.277 回答
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();
}

它比“内联”版本长得多,但无论您要加入多少字符串(并且您可以更改它以使用可变数量的参数),它都可以工作。它将使您将使用它的代码比任何类型的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();
}
于 2012-05-14T08:49:09.150 回答
0
String ans = (s1 == null ? s2 + "/" + s3 : (s2 == null ? s1 + "/" + s3 : (s3 == null ? s1 + "/" + s2 : s1 + "/"+ s2 + "/" + s3 )));

虽然不建议使用它!太难读了!!

于 2012-05-14T08:24:17.987 回答