2

次のコードをより短い形式 (おそらく 1 つのステートメントでしょうか?) に書き直すことは できますか?ab = something.join(a,b,"-");これは、Java 拡張機能、動的言語などによって実現できます。

                String a=....
                String b=.....
                String ab = "";
                if(a!=null && a.length()>0) {
                        ab = a;
                }
                if(b!=null && b.length()>0) {
                        if(ab.length()>0) {
                            ab =ab + "-" + b;
                        } else {
                            ab = b;
                        }
                } 

アップデート:

組み込みのアプローチはありますか?メソッドや複雑な文章を書きたくない。

4

6 に答える 6

2

この機能だけのために外部ライブラリを持ち込むのはやり過ぎかもしれませんが、ApacheCommonsStringUtilsを見てください。ただし、次のようなユーティリティメソッドを作成できます。

private static String join(String delimiter, String...parts) {
    StringBuilder builder = new StringBuilder();
    for (String part: parts) {
        if (!isEmpty(part)) {
            if (builder.length() > 0) {
                builder.append(delimiter);
            }
            builder.append(part);
        }
    }
    return builder.toString();
}

private static boolean isEmpty(String part) {
    return part != null && part.length() > 0;   
}

区切り文字を最初に配置して、 join( "-"、null、 "b"、null、 "d"、 "e"、null)などの可変数の引数を許可します。

于 2012-09-19T06:46:30.523 に答える
2

Guava Joinerを試してみてください

于 2012-09-19T05:27:02.350 に答える
1
String ab = (a != null && !a.isEmpty() ? a : "")
          + (a != null && b != null && !a.isEmpty() && !b.isEmpty() ? "-" : "")
          + (b != null && !b.isEmpty() ? b : "");

文字列が null であり、明示的にチェックしない場合、出力は文字列に string が含まれている場合と同じになると確信しています"null"

また、 + を使用して文字列を追加することは、通常、StringBuilder を使用することと同じですが、冗長ではありません。簡単な例を書き、それをクラス ファイルにコンパイルし、逆コンパイルすることで、これを確認できます (ほとんどの逆コンパイラは、StringBuilders を + 構文に置き換えることを気にしません)。

于 2012-09-19T05:25:39.887 に答える
1

これについての私の2セント:

public boolean isEmpty(String string) {
    return string != null && !"".equals(string);
}

public String join(String a, String b, String separator) {
    if (!isEmpty(a) && !isEmpty(b)) {
        return a + separator + b;
    }
    if (!isEmpty(a)) {
        return a;
    }
    if (!isEmpty(b)) {
        return b;
    }
    return "";
}

public String joinLessObvious(String a, String b, String separator) {
    return !isEmpty(a) && !isEmpty(b) ? a + separator + b : !isEmpty(a) ? a : !isEmpty(b) ? b : "";
}
于 2012-09-19T05:59:49.173 に答える
0

あなたはこれを試すことができますStringBuilder

StringBuilder builder = new StringBuilder("");
builder.append((a != null ? a : ""))
       .append(((a != null && b != null) ? "-" : ""))
       .append((b != null ? b : ""));

次のように、1行で使用するメソッドを作成できます。

public String join(String a, String b, String separator) {
    StringBuilder builder = new StringBuilder("");
    builder.append((a != null ? a : ""))
           .append(((a != null && b != null) ? "-" : ""))
           .append((b != null ? b : ""));
    return builder.toString();
}

そしてそれを次のように呼びます:

System.out.println(join("Another", "Test", "-"));
于 2012-09-19T05:27:42.563 に答える
0

これは少ないコードです:

String ta = (a == null ? "" : a);
String tb = (b == null ? "" : b);
ab = (ta.length() > 0 && tb.length() > 0) ? (ta + "-" + tb) : (ta + tb);

...しかし、私は必ずしもそれを改善とは呼びません。

于 2012-09-19T05:54:36.180 に答える