如果不是空或null,请加入逗号

时间:2011-12-14 09:49:42

标签: java

我看到this 回答如何将String []连接到逗号分隔的字符串。

但是如果值不为空,我需要util才能加入数组 中的字符串。

最好的方法是什么?没有循环之前在String []上删除。我更喜欢一种同时兼顾的方法。

EDITED

例如:

I, love, , u

将是:

 I love u

9 个答案:

答案 0 :(得分:34)

在Java 8中,您可以使用Stream:

    List<String> list = Arrays.asList("I", " ", "love", null, "you");
    String message = list.stream().filter(StringUtils::isNotBlank)
                     .collect(Collectors.joining(", "));
    System.out.println("message = " + message);

答案 1 :(得分:3)

对于Java 8,这是使用流API的解决方案。过滤null和空字符串,并在每个字符串之间添加空格

String joined = Stream.of(I, love, , u)
      .filter(s -> s != null && !s.isEmpty())
      .collect(Collectors.joining(" "));

答案 2 :(得分:2)

为什么不简单地循环数组并使用StringBuilder为非空值构建逗号分隔的字符串。

答案 3 :(得分:2)

检查null / empty有什么问题吗?

String[] values = ?;
if (values != null && values.length > 0) {
  // join
}

您指出的答案已使用StringUtils.join

进行联接

您的要求与此不相符,但它非常简单,最好实现您自己的连接循环,例如

    StringBuilder sb = new StringBuilder();
    boolean first = true;
    for (String word: words) {
        if (word != null && (word = word.trim()).length() > 0) {
            if (first) {
                first = false;
            } else {
                sb.append(',');
            }
            sb.append(word);
        }
    }

答案 4 :(得分:2)

public class So20111214a {
    public static String join(String[] argStrings) {
        if (argStrings == null) {
            return "";
        }
        String ret = "";
        if (argStrings.length > 0) {
            ret = argStrings[0];
        } // if
        for (int i = 1; i<argStrings.length; i++) {
            ret += (argStrings[i] == null) 
                    ? "" 
                    : (argStrings[i].isEmpty() 
                        ? "" 
                        :  ( "," + argStrings[i] ) );
        } // for
        return ret;
    } // join() method

    public static void main(String[] args) {
        String[] grandmasters = {  
            "Emanuel Lasker", 
            "José Raúl Capablanca", 
            "Alexander Alekhine", 
            "Siegbert Tarrasch", 
            "Frank Marshall"  
        };
        String[] s1 = null;
        String[] s2 = {};
        String[] s3 = { "Mikhail Botvinnik" };
        System.out.println(join(s1));
        System.out.println(join(s2));
        System.out.println(join(s3));
        System.out.println(join(grandmasters));
        System.out.println(join(new String[]{"I", "love", "", null, "u!"}));
    } // main() method

    /* output:
    <empty string>
    <empty string>
    Mikhail Botvinnik
    Emanuel Lasker,José Raúl Capablanca,Alexander Alekhine,Siegbert Tarrasch,Frank Marshall
    I,love,u!
    */

} // So20111214a class
PS:对不起使用了?操作员 - 我必须快速完成,我在工作。 :)

答案 5 :(得分:1)

对于只有空跳过番石榴的最佳选择:

Joiner.on(" ").skipNulls().join("I", null, "love", null, "u")

答案 6 :(得分:0)

如果没有任何 API ,我们可以将非空白非空字符串数组加入如下:

用户定义的方法:

public String joinNonBlankStringArray(String s[], String separator) {
    StringBuilder sb = new StringBuilder();
    if (s != null && s.length > 0) {
        for (String w : s) {
            if (w != null && !w.trim().isEmpty()) {
                sb.append(w);
                sb.append(separator);
            }
        }
    }
    return sb.substring(0, sb.length() - 1);// length() - 1 to cut-down last extra separator
}

调用用户定义的方法:

String s[] = {" ","abc", "", "XYZ", "      ", null, "123", null};
String joinVal = joinNonBlankStringArray(s, ",");// "abc,XYZ,123"

答案 7 :(得分:0)

一个纯Java 11解决方案是:

String message = Stream.of("I", null, "Love", "     ", "You")
                       .filter(Objects::nonNull)
                       .filter(Predicate.not(String::isBlank))
                       .collect(Collectors.joining(" "));
System.out.println(message);
  

我爱你

如果您确实需要使用数组-那么可以Stream.of()代替:

Arrays.stream(new String[] { "I", null, "Love", "     ", "You" })

答案 8 :(得分:-3)

雅加达StringUtils做到了。 这是来自那里的代码:

public static String join(Object[] array, String separator) {
    if (array == null) {
        return null;
    }
    return join(array, separator, 0, array.length);
}