2015-10-27 34 views
1

在Java代碼中,我有11個不同的字符串,其中一些(最多9個)可以爲null。字符串是對象的一部分。如果其中沒有一個是空的,我做一個字符串是這樣的:如何在Java中高效地創建字符串

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

如果其中沒有一個是空,那有什麼?。但其中一些可能爲空。如果我檢查它們是否都是null,代碼會變得非常慢並且很長。我怎樣才能以高效和快速的方式生成這樣的字符串?謝謝。

+2

你能使用數組? – Arc676

+0

當字符串爲空時,你想得到什麼結果?就目前而言,你只需在結果中得到字符串「null」 - 不會有錯誤或類似的錯誤。 – RealSkeptic

+0

@ Arc676你可以用一個簡單的例子來演示嗎?謝謝。 – jason

回答

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

問題是輸出字符串中有部分應該放在圓括號中,部分不能用逗號分隔,部分用'+'分隔...... – RealSkeptic

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; 
} 

可以讓你的一部分。

1

如果你只是希望你的代碼儘可能短,使用String.format並擺脫字符串中的「空」。

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", "")); 
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 
1

如果字符串的第六屆指數始終包圍通過()然後你可以使用下面的代碼。

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