まだ文字列のスプライシングにStringBuilderを使用していますか?その後、あなたは出ています

開発中に文字列を連結することがよくあります。たとえば、次の配列があります。

private static final String[] names = {"我", "大意了啊", "年轻人", "不讲武德", "来骗"};

要素を抽出してから、それらを文字列全体にスプライスする必要があります。ターゲット効果は次のとおりです。

我, 大意了啊, 年轻人, 不讲武德, 来骗

「+」スプライシング

で、どうするつもり:

@Test
public void test() {
    String str = names[0] +","+ names[1] +","+ names[2] +","+ names[3] +","+ names[4];
    System.out.println(str);
}

ほとんどの人がこれを行いますが、「、」、「+」が多すぎることがわかりました。スプライシングはあまり柔軟ではないと感じています。

StringBuilderスプライシング

したがって、StringBuilderを使用してスプライスする新しいアプローチがあります。

StringBuilder sb = new StringBuilder();
sb.append(names[0]);
sb.append(",");
sb.append(names[1]);
sb.append(",");
sb.append(names[2]);
sb.append(",");
sb.append(names[3]);
sb.append(",");
sb.append(names[4]);
System.out.println(sb.toString());

これにより「+」は節約されますが、「、」はまだたくさんあり、コードは十分にエレガントではありません。これを念頭に置いて、forループを使用することができます。

StringBuilder sb2 = new StringBuilder();
int length = names.length;
for (int i = 0; i < length; i++) {
    sb2.append(names[i]);
    if (i != length - 1) {
        sb2.append(",");
    }
}

これは良さそうに見えますが、それでも非常に複雑であり、最後に処理を検討する必要があります。

concat()スプライシング

単純なスプライシングでは、次のconcat()方法も使用できます。

public void test() {
    String str = "Lvshen";
    String concat = str.concat(",").concat("Hello");
    System.out.println(concat);
}
//输出
//Lvshen,Hello

String.join()スプライシング

ワンステップの方法を考えてみましょう。

public void test() {
    String str = String.join(",", names[0], names[1], names[2], names[3], names[4]);
    System.out.println(str);
}

このようにして、私たちも結果を達成することができます。

我,大意了啊,年轻人,不讲武德,来骗

String.join()これは、Java 8の背後にあるメソッドであり、シンプルで使いやすいものです。ソースコードは次のとおりです。

StringJoinerスプライシング実現するために内部で使用されていることをご存知ですか

これで、スプライシングの結果が次のようになるという要件があります。

[我,大意了啊,年轻人,不讲武德,来骗]

「+」またはを直接使用する場合は、前の値に基づいて「[]」を追加しStringBuilderます。もちろん、実装はまだ非常に面倒です。面倒な実装をメソッドに抽出して、将来の再利用を容易にすることは悪くありません。

実際、ほとんどのスプライシングホイールが実装されているので、一般的に使用されるいくつかのAPIを見てみましょう。

StringJoinerステッチ

上記はStringJoinerこの要件を達成することができます:

public void test() {
    StringJoiner stringJoiner = new StringJoiner(",", "[", "]");
    for (String name : names) {
        stringJoiner.add(name);
    }
    System.out.println(stringJoiner.toString());
}

new StringJoiner(",", "[", "]");「、」で区切られて表され、接頭辞は「[」、接尾辞は「]」です。結果は次のとおりです。

[我,大意了啊,年轻人,不讲武德,来骗]

StringJoiner最下層はまだ使用されていStringBuilderます。

画像

上記の方法はまだ非常に面倒です。forループを保存したいと思います。次に、他の方法を採用する必要があります。

Collectors.joiningステッチ

Collectors.joiningスプライスに使用できます。これはJava8の機能でもあります。

Stream<String> stream1 = Stream.of(names);
// 拼接成 [x, y, z] 形式
String result1 = stream1.collect(Collectors.joining(", ", "[", "]"));

効果を達成することもできます:

[我,大意了啊,年轻人,不讲武德,来骗]

もちろん、それは1つのステップで実行することもできます。

 Stream.of(names).collect(Collectors.joining(", ", "[", "]"));

前と比較してString.join

 String str = String.join(",", names[0], names[1], names[2], names[3], names[4]);

配列内の要素を1つずつ取得する必要がないため、はるかに便利です。

Joiner.onステッチ

Java8スプライシング方法を使用することに加えて、有名なGoogleフレームワークであるGuavaを使用することもできます。まず、Mavenの依存関係を導入する必要があります。

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>18.0</version>
</dependency>

次に、使用例を記述します。

Joiner joiner = Joiner.on(",").skipNulls();
String join = joiner.join("公众号", null, "Lvshen的技术小屋");
System.out.println("join:" + join);

Joiner.on()このメソッドを使用して、値がnullの要素を除外します。上記のコード実行の結果は次のとおりです。

join:公众号,Lvshen的技术小屋

もちろん、異常な要件があり、nullの値がフィルタリングされない場合があり、null要素を空の文字列 ""などの他の値に置き換える必要があります。

Joiner joiner1 = Joiner.on(",").useForNull("");
String content1 = joiner1.join("公众号", null, "Lvshen的技术小屋", "欢迎订阅");
System.out.println("content1:" + content1);

useForNull()null値を置き換えるために使用されます。次のように実行します。

content1:公众号,,Lvshen的技术小屋,欢迎订阅

総括する

通常の開発では、「+」またはStringBuilderのステッチ、我々が使用することができ、複雑なモザイク使用してはならないStringJoinerCollectors.joiningJoiner.onおよび他の方法を。それらはすべて下部でStringBuilderを使用します。StringBuilderを使用して文字列を連結する場合は、これらのメソッドを検討できます。

過去におすすめ

QRコードをスキャンして、よりエキサイティングになります。または、WeChatLvshen_9を検索すると、返信してバックグラウンドで情報を取得できます

  1. 回复"java" 获取java电子书;

  2. 回复"python"获取python电子书;

  3. 回复"算法"获取算法电子书;

  4. 回复"大数据"获取大数据电子书;

  5. 回复"spring"获取SpringBoot的学习视频。

  6. 回复"面试"获取一线大厂面试资料

  7. 回复"进阶之路"获取Java进阶之路的思维导图

  8. 回复"手册"获取阿里巴巴Java开发手册(嵩山终极版)

  9. 回复"总结"获取Java后端面试经验总结PDF版

  10. 回复"Redis"获取Redis命令手册,和Redis专项面试习题(PDF)

  11. 回复"并发导图"获取Java并发编程思维导图(xmind终极版)

もう1つ:[マイベネフィット]をクリックして、さらに驚きを持ってください。

 

おすすめ

転載: blog.csdn.net/wujialv/article/details/111038703