7

次のコード ロジックが必要です。

これらは 3 つの文字列変数です。

String s1 = "A"; String s2 = "B"; String s3 = "C";

特定のシナリオに基づいて、次の出力が必要です。

  • シナリオ #1 実際の出力は「A / B / C」である必要があります
  • シナリオ #2 s1 が空の場合、出力は "B / C" になるはずです
  • シナリオ #3 s2 が空の場合、出力は "A / C" になるはずです
  • シナリオ #4 s3 が空の場合、出力は "A / B" になるはずです`

これは三項演算を使用して可能ですか?

4

5 に答える 5

10

Guava class Joiner と Apache Commons Lang StringUtils.defaultIfBlank の助けを借りてそれを行うことができます:

Joiner.on("/").skipNulls().join(
  defaultIfBlank(s1, null),
  defaultIfBlank(s2, null),
  defaultIfBlank(s3, null)
);

任意の数の文字列を処理する必要がある場合は、「defaultIfBlank」の 3 行をループのあるメソッドに抽出できます。

于 2014-01-27T07:21:18.223 に答える
3

ストリームを使用した java8-way

Arrays.stream(new String[]{null, "", "word1", "", "word2", null, "word3", "", null})
    .filter(x -> x != null && x.length() > 0)
    .collect(Collectors.joining(" - "));
于 2017-01-11T13:54:08.953 に答える
2

ここでは三項演算子を使用しないため、これは正しい答えではありません。

空の文字列を削除して文字列を連結する必要がある場合は、一般的な関数を作成できます (エラー チェックも最適化も行わず、例として取り上げます)。

public static String join(String[] array, char separator) {
    StringBuffer result = new StringBuffer();

    for (int i = 0; i < array.length; ++i) {
        if (array[i] != null && array[i].length() != 0) {
            if (result.length() > 0)
                result.append(separator);

            result.append(array[i]);
        }
    }

    return result.toString();
}

「インライン」バージョンよりもかなり長いですが、結合する文字列の数に関係なく機能します (可変数のパラメーターを使用するように変更できます)。ifそれを使用するコードは、どのような種類のツリーよりもはるかに明確になります。

このようなもの:

public static String join(char separator, String... items, ) {
    StringBuffer result = new StringBuffer();

    for (String item: items) {
        if (item != null && item.length() != 0) {
            if (result.length() > 0)
                result.append(separator);

            result.append(item);
        }
    }

    return result.toString();
}
于 2012-05-14T08:49:09.150 に答える
2

できるよ:

result = ((s1==null)?"":(s1+"/"))+((s2==null)?"":(s2+"/"))+((s3==null)?"":s3);

見る

于 2012-05-14T08:25:37.277 に答える
0
String ans = (s1 == null ? s2 + "/" + s3 : (s2 == null ? s1 + "/" + s3 : (s3 == null ? s1 + "/" + s2 : s1 + "/"+ s2 + "/" + s3 )));

ただし、それを使用することはお勧めしません!! 読めなさすぎる!!

于 2012-05-14T08:24:17.987 に答える