在Java代码中,我有11个不同的字符串,其中一些(最多9个)可以为null。字符串是对象的一部分。如果它们都不为null,我会创建一个这样的字符串:
string1 + "," + string2 + "," + string3 + "," + string4 + "," + string5 + "," + string6 + "(" + string7 + ")" + string8 + string9 + "+" + string10 + string11
如果它们都不为null,那就太好了。但其中一些可能是空的。如果我检查它们中的每一个是否为null,代码变得非常缓慢。如何以高效快捷的方式生成这样的字符串?感谢。
答案 0 :(得分:3)
public static void main(String[] args) {
String string1 = "test1";
String string2 = "test2";
String string3 = "test3";
String string4 = null;
String string5 = "test5";
StringBuilder stringBuilder = new StringBuilder();
List<String> valueList = new ArrayList<>();
valueList.add(string1);
valueList.add(string2);
valueList.add(string3);
valueList.add(string4);
valueList.add(string5);
// etc.
for (String value : valueList) {
if (value != null) {
stringBuilder.append(value);
}
else {
value = ",";
stringBuilder.append(value);
}
}
System.out.println(stringBuilder);
}
输出:
test1test2test3,TEST5
答案 1 :(得分:2)
使用Java 8,您可以在第一部分使用逗号分隔的字符串:
String part1 = Stream.of(string1, string2, string3, string4, string5, string6)
.filter(Objects.notNull())
.collect(joining(",");
从那时起你就会有一个不规则的结构,所以你需要自定义逻辑来处理它。辅助函数
static String emptyForNull(String s) {
return s == null ? "" : s;
}
可以帮助你解决问题。
答案 2 :(得分:1)
如果您只是希望您的代码尽可能短,请使用String.format并删除&#34; null&#34;在字符串中。
String result = String.format("%s,%s,%s,%s,%s,%s(%s)%s,%s,%s,%s",
string1, string2, string3, string4, string5,
string6, string7, string8, string9, string10,
string11);
System.out.println(result.replace("null", ""));
答案 3 :(得分:1)
在Java 8中,您可以使用收集器进行流式处理和连接,并使用对象类进行过滤
List<String> strings = Arrays.asList("first", "second", null, "third", null, null, "fourth");
String res = strings.stream().filter(Objects::nonNull).collect(Collectors.joining(","));
System.out.println(res);
导致输出
first,second,third,fourth
答案 4 :(得分:1)
如果您的字符串的第6个索引始终被(
和)
包围,那么您可以使用以下代码。
List<String> vals = new ArrayList<>();
vals.add(string1);
vals.add(string2);
vals.add(string3);
vals.add(string4);
vals.add(string5);
vals.add(string6);
vals.add(string7);
vals.add(string8);
vals.add(string9);
vals.add(string10);
vals.add(string11);
for (int i =0 ; i < vals.size(); i++) {
// check null values
if (vals.get(i) != null) {
// as your requirement surround 7th value with ( and )
if(vals.indexOf(vals.get(i)) == 6) {
values += "\b(" + vals.get(i)+")";
} else {
values += vals.get(i)+",";
}
}
}
System.out.println(values+"\b");
<强>输出强>
如果第4和第9个字符串是null
那么,
test1,test2,test3,test5,test6(test7)test8,test10,test11