1. 文字列の変更

Java では、文字列は不変オブジェクトです。これは、String クラスを高度に最適化し、どこでも使用できるようにするために行われました。たとえば、HashMap コレクションのキーとして使用する場合は、不変型のみが推奨されます

ただし、プログラマがクラスが可変である方が便利であると考える状況がよく発生しますString。彼らは、メソッドが呼び出されるたびに新しい部分文字列を作成しないクラスを望んでいます。

さて、非常に大きな文字列があり、その文字列の末尾に頻繁に何かを追加する必要があるとします。この場合、文字のコレクション ( ArrayList<Character>) であっても、String オブジェクトを常に再作成して連結するより効率的です。

変更可能な String のような型が Java 言語に追加されたのはまさにこのためです。と呼ばれますStringBuilder

オブジェクトの作成

既存の文字列に基づいてオブジェクトを作成するにはStringBuilder、次のようなステートメントを実行する必要があります。

StringBuilder name = new StringBuilder(string);

空の可変文字列を作成するには、次のようなステートメントを使用する必要があります。

StringBuilder name = new StringBuilder();

メソッドのリスト

このStringBuilderクラスには 24 個の便利なメソッドがあります。最も重要なものは次のとおりです。

方法 説明
StringBuilder append(obj)
渡されたオブジェクトを文字列に変換し、現在の文字列に追加します。
StringBuilder insert(int index, obj)
渡されたオブジェクトを文字列に変換し、現在の文字列に挿入します。
StringBuilder replace(int start, int end, String str)
start..end 間隔で指定された文字列の部分を、渡された文字列に置き換えます。
StringBuilder deleteCharAt(int index)
指定されたインデックスを持つ文字を文字列から削除します
StringBuilder delete(int start, int end)
指定された間隔内の文字を文字列から削除します
int indexOf(String str, int index)
現在の文字列内の部分文字列を検索します
int lastIndexOf(String str, int index)
現在の文字列内の部分文字列を末尾から検索します。
char charAt(int index)
渡されたインデックスにある文字列内の文字を返します。
String substring(int start, int end)
指定された間隔で定義された部分文字列を返します。
StringBuilder reverse()
現在の文字列を反転します。
void setCharAt(int index, char)
指定されたインデックスの文字を渡された文字に変更します
int length()
文字列の長さを文字数で返します。

それぞれの方法について簡単に説明します


2. メソッドの説明:

文字列に追加する

可変文字列 ( StringBuilder) に何かを追加するには、append()メソッドを使用します。例:

コード 説明
StringBuilder builder = new StringBuilder("Hi");
builder.append("Bye");
builder.append(123);
Hi
HiBye
HiBye123

標準文字列への変換

オブジェクトを String オブジェクトに変換するにはStringBuilder、そのメソッドを呼び出すだけですtoString()。例

コード 出力
StringBuilder builder = new StringBuilder("Hi");
builder.append(123);
String result = builder.toString();
System.out.println(result);
Hi123

キャラクターを削除するにはどうすればよいですか?

可変文字列内の文字を削除するには、deleteCharAt()メソッドを使用する必要があります。例:

コード 出力
StringBuilder builder = new StringBuilder("Hello");
builder.deleteCharAt(2);
String result = builder.toString();
System.out.println(result);
Helo

文字列の一部を別の文字列に置き換えるにはどうすればよいですか?

このためには方法がありますreplace(int begin, int end, String str)。例:

コード 出力
StringBuilder builder = new StringBuilder("Mellow");
builder.replace(2, 5, "Hello!");
String result = builder.toString();
System.out.println(result);
MeHello!w


3. 文字列を扱う便利な例

文字列を反転するにはどうすればよいですか?

これを行うには特別な方法があります — reverse(); 例:

コード 出力
String str = "Hello";
StringBuilder builder = new StringBuilder(str);
builder.reverse();
String result = builder.toString();
System.out.println(result);
olleH

StringBufferクラス

別のクラス StringBuffer がありますが、これはこのクラスの類似品ですStringBuilderが、そのメソッドはsynchronized修飾子でマークされています。これは、StringBufferオブジェクトに複数のスレッドから同時にアクセスできることを意味します。

ただし、 よりもはるかに遅いですStringBuilderJava マルチスレッド化クエストでマルチスレッド化を積極的に検討し始めるときに、このクラスが必要になる場合があります。