2016-04-05 14 views
-2

4 dizgim var String 1 ,String 2 ,String 3 , String 4. Bunları phones adlı bir dizeye eklemek istiyorum. boş String phones = String 1 + "~" + String 2 + "~" + String 3 +"~" + String 4;Tek bir String'e teller nasıl eklenir, Java?

String 2 and 3 ben alacağı: String 1~~~String 4 Ancak ben basit istemiyorum.

phones'u yalnızca boş olmayan dizeleri gösterme ve her dize arasında "~" ekleme yapabilir miyim? Yani String 2 and 3 boşsa, bunun yerine String 1 ~ String 4 alırdım.

+0

İlk çözümler sorunsuz çalışıyor! Yanlış yazılmış mıyım yoksa yanlış mı yazdım? –

+0

Yığın akışına hoş geldiniz. Üzgünüz, ilk sorumunuz bazılarından olumsuz tepki aldı. Bütün cevaplar da düştü. İdeal olarak, önce yardımcı olmalıyız. Sizi siteden uzaklaştırmasına izin verme. ["İyi bir soru nasıl sorabilirim?"] (Http://stackoverflow.com/help/how-to-ask) ve Jon Skeet'in ["Mükemmel Soruyu Yazmak"] bölümünü okumakta yardımcı olabilirsiniz. //codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/). –

cevap

2

Bir StringBuilder kullanabilir ve tüm dizeleri ama boş STRING4 ise, alacağım String.isEmpty()

StringBuilder sb = new StringBuilder(); 
sb.append(string1); 
if (!string2.isEmpty()) { 
    sb.append("~").append(string2); 
} 
if (!string3.isEmpty()) { 
    sb.append("~").append(string3); 
} 
if (!string4.isEmpty()) { 
    sb.append("~").append(string4); 
} 
String phone = sb.toString(); 

gibi boş String s için kontrol edebilir: ~ String4. İfadeleri bir demet eklemeden ~ önlemek için bir yolu var mı?

Sen orada,

static void join(StringBuilder sb, String str) { 
    if (!str.isEmpty()) { 
     if (sb.length() > 0) { 
      sb.append('~'); 
     } 
     sb.append(str); 
    } 
} 

gibi join sizin String s bir yardımcı program (veya yardımcı) yöntemini oluşturmak ve Java 8 kullanıyorsanız o zaman

StringBuilder sb = new StringBuilder(string1); 
join(sb, string2); 
join(sb, string3); 
join(sb, string4); 
String phone = sb.toString(); 
+0

Çok geç bir dakika oldu! 'StringBuilder' da bunu yapmak için ideal bir yol gibi görünüyor. –

+0

@AshwinGupta - Java 8 akışlarıyla çok daha kısa bir uygulama mümkündür. –

+0

@AndyThomas Tamam, bana bugün yeni bir şey öğrettin. Bunu daha önce hiç kullanmamıştım. –

1

gibi kullanabilirsin şimdi java.util.StringJoiner sınıfıdır. Örneğin

: Daha sonra Java 8 veya kullanıyorsanız

StringJoiner sj = new StringJoiner("~"); 
if (!string1.isEmpty()) 
    sj.add(string1); 
if (!string2.isEmpty()) 
    sj.add(string2); 
if (!string3.isEmpty()) 
    sj.add(string3); 
if (!string4.isEmpty()) 
    sj.add(string4); 

String desiredString = sj.toString(); 
4

Sen, hiç fazla kod gerekmez.

String phones = Stream.of(string1, string2, string3, string4) 
       .filter(s -> ! s.isEmpty()) // Filter out empty strings 
       .collect(Collectors.joining("~")); 

Boş değerleriniz varsa, bunları da filtreleyebilirsiniz.

String phones = Stream.of(string1, string2, string3, string4) 
       .filter(Objects::nonNull) // <-- Filter out nulls 
       .filter(s -> ! s.isEmpty()) 
       .collect(Collectors.joining("~")); 

DÜZENLEME: Java 8

Eğer Java önceki bir sürümünü kullanıyorsanız önce, bir yaklaşım bir kez istenilen işlemi tanımlamak ve sonra tekrar tekrar aramak.

public static void join(StringBuilder sb, String s) { 
    if ((null != s) && ! s.isEmpty()) { 
     if (0 < sb.length()) { 
      sb.append("~"); 
     } 
     sb.append(s); 
    } 
} 

public static void main(String[] args) { 
    StringBuilder sb = new StringBuilder(); 
    String string1 = "foo", string2 = "", string3 = null, string4 = "bar"; 

    join(sb, string1); 
    join(sb, string2); 
    join(sb, string3); 
    join(sb, string4); 

    System.out.println(sb.toString()); 
} 
+0

mind = blown ... java'yı bir süredir kullanmadı –

+0

Akımlar bazen özlü kodla sonuçlanabilir, bunun nedeni kısmen bunun nasıl elde edildiğini değil, ne istediğinizi belirtmenizdir. :) –

İlgili konular