使用分隔符连接字符串并剥离空字符串

时间:2012-05-14 08:18:37

标签: java string

我需要以下代码逻辑:

这是三个String变量,

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

这是否可以使用三元操作?

5 个答案:

答案 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)

你可以这样做:

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

See it

答案 4 :(得分:0)

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

不会建议使用它!!太难以理解!!