文字列から文字列への変換

文字列を文字ストリームに変換する

1. 概要

Java 8では、シーケンスを処理するための機能的な操作を備えたStreamAPIが導入されました。 それについてもっと読みたい場合は、have a look at this article.

この簡単な記事では、Stringを1文字のStreamに変換する方法を説明します。

2. chars()を使用した変換

String APIには、StringオブジェクトからStreamのインスタンスを取得できる新しいメソッドchars()があります。 この単純なAPIは、入力StringからIntStreamのインスタンスを返します。

簡単に言えば、IntStreamには、Stringオブジェクトの文字の整数表現が含まれています。

String testString = "String";
IntStream intStream = testString.chars();

文字をCharacterに相当するものに変換せずに、文字の整数表現を操作することができます。 これにより、各整数をCharacterオブジェクトにボックス化する必要がなくなるため、パフォーマンスがわずかに向上する可能性があります。

ただし、読み取り用の文字を表示する場合は、整数を人間にわかりやすいCharacter形式に変換する必要があります。

Stream characterStream = testString.chars()
  .mapToObj(c -> (char) c);

3. codePoints()を使用した変換

または、codePoints()メソッドを使用してString.からIntStreamのインスタンスを取得することもできます。このAPIを使用する利点は、Unicode補助文字を効果的に処理できることです。

補助文字はUnicodeサロゲートペアで表され、単一のコードポイントにマージされます。 これにより、Unicodeシンボルを正しく処理(および表示)できます。

IntStream intStream1 = testString.codePoints();

返されたIntStreamStream<Character>にマップして、ユーザーに表示する必要があります。

Stream characterStream2
  = testString.codePoints().mapToObj(c -> (char) c);

4. 単一文字StringsStreamへの変換

これまでのところ、Streamの文字を取得することができました。代わりに、単一文字StringsのStreamが必要な場合はどうなりますか?

記事の前半で指定したように、codePoints()またはchars()メソッドを使用して、Stream<String>にマップできるIntStreamのインスタンスを取得します。

マッピングプロセスでは、まず整数値をそれぞれの対応する文字に変換します。

次に、String.valueOf()またはCharacter.toString()を使用して、文字をStringオブジェクトに変換できます。

Stream stringStream = testString.codePoints()
  .mapToObj(c -> String.valueOf((char) c));

5. 結論

このクイックチュートリアルでは、codePoints()またはchars()メソッドを呼び出すことにより、StringオブジェクトからCharacterのストリームを取得する方法を学習します。

これにより、Stream APIを最大限に活用して、文字を便利かつ効果的に操作できます。

いつものように、コードスニペットはover on GitHubで見つけることができます。