我看到this 回答如何将String []连接到逗号分隔的字符串。
但是如果值不为空,我需要util才能加入数组 中的字符串。
最好的方法是什么?没有循环之前在String []上删除。我更喜欢一种同时兼顾的方法。
EDITED
例如:
I, love, , u
将是:
I love u
答案 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);
}