如何在Java中有效地从许多字符串创建字符串

时间:2015-10-27 12:27:02

标签: java string

在Java代码中,我有11个不同的字符串,其中一些(最多9个)可以为null。字符串是对象的一部分。如果它们都不为null,我会创建一个这样的字符串:

string1 + "," + string2 + "," + string3 + "," + string4 + "," + string5 + "," + string6 + "(" + string7 + ")" + string8 + string9 + "+" + string10 + string11

如果它们都不为null,那就太好了。但其中一些可能是空的。如果我检查它们中的每一个是否为null,代码变得非常缓慢。如何以高效快捷的方式生成这样的字符串?感谢。

5 个答案:

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