2016-04-05 12 views
-2

私は4弦String 1 ,String 2 ,String 3 , String 4を持っています。 phonesという文字列にそれらを追加したいと思います。しかし、私はシンプルにしたくない: String phones = String 1 + "~" + String 2 + "~" + String 3 +"~" + String 4;文字列をJavaのStringに追加するには?

String 2 and 3は、私はなるだろう空の場合:String 1~~~String 4を。

phonesは空でない文字列のみを表示し、各文字列間に"~"を追加するにはどうすればよいですか?だからString 2 and 3が空の場合は、代わりに String 1 ~ String 4となります。

+0

最初の解決策はうまくいきました!それは重複しているか、間違ってフォーマットされていたので、私の質問は投票されましたか? –

+0

ようこそstackoverflowへ。申し訳ありませんが、最初の質問は一部の人から否定的な反応を受けました。すべての答えも下降した。理想的には、最初に助けてください。それがあなたをサイトから離れさせないようにしてください。 Jon Skeetの「完璧な質問を書いてください」(http://stackoverflow.com/help/how-to-ask)を読むと、 //codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/)。 –

答えて

2

あなたがStringBuilderを使用して、すべての文字列がなく、空string4であれば、私が得る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(); 

のように空String秒間チェックすることができ:〜string4を。 if文を追加せずに〜を防ぐ方法はありますか?

あなたあり、

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

ようjoinあなたString sのユーティリティ(またはヘルパー)メソッドを作成し、Java 8を使用している場合は、

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

私は1分遅れました! 'StringBuilder'もこれを行う理想的な方法のようです。 –

+0

@AshwinGupta - Java 8ストリームでははるかに簡潔な実装が可能です。 –

+0

@AndyThomas大丈夫、あなたはちょうど今何か新しいことを教えてくれました。私はこれまでに使われたものを見たことがない。 –

1

のようなものを使用することができます現在はjava.util.StringJoinerクラスです。

たとえば:あなたは、Java 8以降を使用している場合

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

あなたは、すべてで多くのコードを必要としません。

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

値がNULLの場合は、フィルタリングすることもできます。

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

EDIT:あなたは、Javaの以前のバージョンを使用している場合のJava 8の前に

、1つのアプローチは、一度所望の動作を定義し、それを繰り返し呼び出すことです。

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 ... while whileそれは思われます。 –

+0

ストリームは時には簡潔なコードになります。 :) –

関連する問題