Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Java辞典

  1. トップページ
  2. Java辞典
  3. 文字列.toCharArray() / String.copyValueOf()

文字列.toCharArray() / String.copyValueOf()

文字列を文字の配列(char[])に変換したり、文字配列から文字列を生成したりするメソッドです。文字列を1文字ずつ操作したい場合や、ストリームAPIと組み合わせる際に活用されます。

構文
// 文字列を char 配列に変換します。
文字列.toCharArray();

// char 配列から文字列を生成します。
String.copyValueOf(char[] data);
String.copyValueOf(char[] data, int offset, int count);

// 文字列の各文字のコードポイントをIntStreamで返します(Java 8 以降)。
文字列.chars();
メソッド一覧
メソッド概要
toCharArray()文字列の各文字を要素とする新しい char[] を返します。
String.copyValueOf(char[] data)文字配列全体から文字列を生成して返します。new String(char[]) と同等の結果を返します。
String.copyValueOf(char[] data, int offset, int count)文字配列の offset から count 文字分の文字列を生成して返します。
chars()文字列の各文字を int(コードポイント)として扱う IntStream を返します。Java 8 以降で使用できます。
サンプルコード
// toCharArray() で文字配列に変換します。
String str = "Hello";
char[] chars = str.toCharArray();
for (char c : chars) {
    System.out.print(c + " "); // 『H e l l o 』と出力されます。
}
System.out.println();

// 文字配列を操作してから文字列に戻します。
char[] arr = "banana".toCharArray();
arr[0] = 'B'; // 先頭を大文字に変更します。
String modified = new String(arr);
System.out.println(modified); // 『Banana』と出力されます。

// String.copyValueOf() で char 配列から文字列を生成します。
char[] data = {'J', 'a', 'v', 'a'};
String result = String.copyValueOf(data);
System.out.println(result); // 『Java』と出力されます。

// offset と count を指定して一部を取り出します。
String partial = String.copyValueOf(data, 0, 2);
System.out.println(partial); // 『Ja』と出力されます。

// chars() をストリームAPIで活用します。
long count = "Hello World".chars()
        .filter(c -> c == 'l')
        .count();
System.out.println(count); // 『3』と出力されます。
概要

『toCharArray()』は文字列を char の配列に変換します。返された配列はコピーなので、要素を変更しても元の文字列には影響しません(Javaの文字列は不変)。文字を1文字ずつ処理するループを書く場合に便利です。

Java 8以降では『chars()』でストリームAPIを使ったより宣言的な記述が可能です。ただし『chars()』が返すのは char 型ではなく int 型のストリーム(IntStream)なので、文字として扱うには明示的に (char) にキャストする必要があります。

文字列の長さや指定位置の文字取得には『length() / charAt()』、文字列の切り出しには『substring()』を使用してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。