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

1概要

Java 8は、シーケンスを処理するための機能的な操作を伴う Stream APIを導入しました。あなたがそれについてもっと読みたいのなら、 この記事を見てください。

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

2 chars() を使用した変換

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

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

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

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

ただし、文字を表示用に表示する場合は、整数を人に優しい Character 形式に変換する必要があります。

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

3 codePoints() を使用した変換

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

補助文字はUnicodeサロゲートペアで表され、単一のコードポイントにマージされます。このようにして、私たちはあらゆるUnicodeシンボルを正しく処理(そして表示)することができます。

IntStream intStream1 = testString.codePoints();

返された IntStream Stream <Character> にマッピングしてユーザーに表示する必要があります。

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

4単一文字の Stream への変換 Strings

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

この記事の前半で指定したとおり、 codePoints() メソッドまたは chars() メソッドを使用して IntStream のインスタンスを取得し、これを Stream <String> にマッピングできます。

マッピング処理では、最初に整数値をそれぞれの同等の文字に変換します。

それから String.valueOf() または Character.toString() を使って文字を String オブジェクトに変換できます。

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

5結論

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

これにより、 Stream APIを最大限に活用することができます。これは、文字を便利かつ効果的に操作するためです。

いつものように、コードスニペットはhttps://github.com/eugenp/tutorials/tree/master/java-strings[over on GitHub]にあります。

前の投稿:Apache Shiroの紹介
次の投稿:ジャクソンの例外 - 問題と解決策