Javaでの文字列の連結

1. 前書き

Javaには、**連結cate ** __ * Strings。* __専用の多数のメソッドとクラスが用意されています。
このチュートリアルでは、いくつかの一般的な落とし穴と悪い習慣を概説するだけでなく、それらのいくつかに飛び込みます*。

2. StringBuilder

最初は謙虚な__StringBuilderです。 __このクラスは、__String __manipulationの作業を容易にする__String -__ buildingユーティリティの配列を提供します。
__StringBuilder ___classを使用して、__String ___concatenationの簡単な例を作成してみましょう。
StringBuilder stringBuilder = new StringBuilder(100);

stringBuilder.append("Baeldung");
stringBuilder.append(" is");
stringBuilder.append(" awesome");

assertEquals("Baeldung is awesome", stringBuilder.toString());
内部的には、* _StringBuilder_は変更可能な文字配列を保持しています。*サンプルコードでは、__StringBuilder __constructorを通じて*初期サイズが100 *であると宣言しています。 *このサイズ宣言のため、__StringBuilder ___は非常に効率的です* *連結方法_Strings _。*
また、** __ StringBuffer ___classが** __ * StringBuilder *の同期バージョンであることも注目に値します。 __
多くの場合、同期はスレッドセーフと同義ですが、__StringBufferの__builderパターンのため、マルチスレッドアプリケーションでの使用は推奨されません。 同期メソッドへの個々の呼び出しはスレッドセーフですが、https://dzone.com/articles/why-synchronized-stringbuffer [複数の呼び出しはありません]。

3. 加算演算子

次は加算演算子(+)です。 これは、数値を追加するのと同じ演算子であり、* _ St​​rings ._ *に適用されると連結するために*オーバーロードされます
これがどのように機能するかを簡単に見てみましょう。
String myString = "The " + "quick " + "brown " + "fox...";

assertEquals("The quick brown fox...", myString);
一見すると、これは__StringBuilder __オプションよりもはるかに簡潔に見えるかもしれません。 ただし、ソースコードのコンパイル時に、*記号は_StringBuilder.append()_ calls。*のチェーンに変換されます。このため、* __StringBuilder ___と+メソッド*を連結することは*悪い習慣と見なされます*。
さらに、ループ内で+演算子を使用する__String __concatenationは避けるべきです。 __String __objectは不変であるため、連結を呼び出すたびに新しい__String __objectが作成されます。

4.  String methods

__String __class自体は、_Strings._を連結するためのメソッドのホスト全体を提供します。

4.1。 String.concat

当然のことながら、_String.concat_メソッドは、__String __objectsを連結しようとするときの最初の呼び出しポートです。 *このメソッドはa__String __objectを返すため、メソッドをチェーン化することは便利な機能です。*
String myString = "Both".concat(" fickle")
  .concat(" dwarves")
  .concat(" jinx")
  .concat(" my")
  .concat(" pig")
  .concat(" quiz");

assertEquals("Both fickle dwarves jinx my pig quiz", myString);
この例では、チェーンはa___String ___literalで開始され、__concat ___methodにより呼び出しをチェーンしてさらに_Strings_を追加できます。

4.2。 String.format

次はlink:/java-string-formatter[the __String.format __method]で、さまざまなJava __Objects ___intoをa__String __templateに挿入できます。
__String.format __methodシグネチャは、* single __String __denoting our template *を取ります。 この*テンプレートには、さまざまな__Objects ___shouldが配置される*を表す「%」文字が含まれています。
テンプレートが宣言されると、テンプレートに*挿入されるlink:/java-varargs[varargs] __Object __arrayを取得します*。
簡単な例でこれがどのように機能するかを見てみましょう:
String myString = String.format("%s %s %.2f %s %s, %s...", "I",
  "ate",
  2.5056302,
  "blueberry",
  "pies",
  "oops");

assertEquals("I ate 2.51 blueberry pies, oops...", myString);
上記でわかるように、このメソッドはthe__Strings ___inを正しいフォーマットに挿入しました。

4.3。 _String。 join _(Java 8+)

*アプリケーションがJava 8 * *以上で実行されている場合、__String.join __methodを利用できます。 これにより、__Strings __の配列を共通のデリミタで*結合でき、スペースが失われないようにします。
String[] strings = {"I'm", "running", "out", "of", "pangrams!"};

String myString = String.join(" ", strings);

assertEquals("I'm running out of pangrams!", myString);
この方法の大きな利点は、文字列間の区切り文字を心配する必要がないことです。

5.  _StringJoiner _(Java 8+)

_StringJoiner_は、__String.join __functionalityのすべてを単純なクラスに抽象化します。 * constructorは、オプションのプレフィックスとサフィックス*を含む区切り文字を取ります。 適切な名前の__add __methodを使用して__Strings __を追加できます。
StringJoiner fruitJoiner = new StringJoiner(", ");

fruitJoiner.add("Apples");
fruitJoiner.add("Oranges");
fruitJoiner.add("Bananas");

assertEquals("Apples, Oranges, Bananas", fruitJoiner.toString());
class__String.join ___methodの代わりにこのクラスを使用することにより、*プログラムの実行時に__Strings ___を追加できます*;最初に配列を作成する必要はありません!
詳細と例については、https://www.baeldung.com/java-string-joiner [_StringJoiner_の記事]をご覧ください。

6.  Arrays.toString

配列のトピックについては、https://www.baeldung.com/java-util-arrays [__Array __class]にも*オブジェクトの配列を適切にフォーマットする便利な__toString __methodが含まれています。囲まれたオブジェクトの__toString __method –したがって、定義されたオブジェクトがあることを確認する必要があります。
String[] myFavouriteLanguages = {"Java", "JavaScript", "Python"};

String toString = Arrays.toString(myFavouriteLanguages);

assertEquals("[Java, JavaScript, Python]", toString);
残念ながら、__Arrays.toString __methodはカスタマイズできず、*角括弧で囲まれたa __String ___ encased *のみを出力します。

7.  _Collectors.joining _(Java 8+)

最後に、__Collectors.joining __methodを見てみましょう
List<String> awesomeAnimals = Arrays.asList("Shark", "Panda", "Armadillo");

String animalString = awesomeAnimals.stream().collect(Collectors.joining(", "));

assertEquals("Shark, Panda, Armadillo", animalString);
ストリームを使用すると、フィルタリング、マッピング、反復など、https://www.baeldung.com/java-streams [Java 8API__Stream __API]に関連するすべての機能のロックが解除されます。

8. 要約

この記事では、Java言語で_Strings _ ** ___ ___を連結するために使用される多数のクラスとメソッドについて詳しく説明しました。
いつものように、ソースコードはhttps://github.com/eugenp/tutorials/tree/master/java-strings-2[GitHubで]で入手できます。