Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java 9でStringクラスに追加された新メソッドとは?chars()とcodePoints()の使い方を解説

概要

Javaにおいて、Stringクラスは不変(immutable)なクラスとして設計されています。Java 9では、このStringクラスに2つの新しいメソッドが追加されました。それがchars()メソッドとcodePoints()メソッドです。どちらのメソッドもIntStreamオブジェクトを返し、Stream APIを活用した文字列操作を簡潔に記述できるようになります。

1) chars()メソッド

chars()メソッドは、文字列内の各char値をゼロ拡張(zero-extension)したint値のストリームを返します。従来のforループを使わずに、各文字をStream APIで処理できるのが大きな特徴です。

構文

public IntStream chars()

使用例

import java.util.stream.IntStream;

public class StringCharsMethodTest {
   public static void main(String args[]) {
      String str = "Welcome to TutorialsPoint";
      IntStream intStream = str.chars();
      intStream.forEach(x -> System.out.printf("-%s", (char)x));
   }
}

実行結果

-W-e-l-c-o-m-e- -t-o- -T-u-t-o-r-i-a-l-s-P-o-i-n-t

上記の例では、各文字の前にハイフン(-)を出力しています。このことから、文字列が1文字ずつストリームとして処理されている様子が確認できます。

2) codePoints()メソッド

codePoints()メソッドは、文字列からUnicodeコードポイント値のストリームを返します。chars()メソッドとの主な違いは、サロゲートペア(絵文字などの補助文字に使われる、2つのcharで表現される文字)を1つのコードポイントとして正しく扱える点です。

構文

public IntStream codePoints()

使用例

import java.util.stream.IntStream;

public class StringCodePointsMethodTest {
   public static void main(String args[]) {
      String str = "Welcome to Tutorix";
      IntStream intStream = str.codePoints();
      intStream.forEach(x -> System.out.print(new StringBuilder().appendCodePoint(x)));
   }
}

実行結果

Welcome to Tutorix

この例では、StringBuilderのappendCodePoint()メソッドを使って、各コードポイントを再び文字に変換しながら出力しています。

chars()とcodePoints()の違い

両メソッドの主な違いは以下の通りです。

  • chars():各char値(UTF-16コードユニット)を個別に処理するため、絵文字などのサロゲートペアは2つの値に分割されてしまう。
  • codePoints():Unicodeコードポイント単位で処理するため、サロゲートペアも1文字として正しく扱える。

日本語を含むマルチバイト文字や絵文字を扱うアプリケーションでは、codePoints()メソッドの利用を検討するとよいでしょう。

  1. Java 9における@Deprecatedアノテーションの改善点とは?新要素「since」「forRemoval」を徹底解説

    @Deprecatedアノテーションとはクラス、メソッド、フィールドなど、プログラム内のあらゆる要素に付与できる@Deprecatedアノテーションは、「その要素はもはや使用すべきではない」ことを示すためのものです。要素が非推奨とされる主な理由は以下の通りです。使用すると危険であり、エラーを引き起こす可能性がある将来のバージョンで互換性がなくなる可能性がある将来のバージョンで削除される可能性があるより優れた、効率的な代替手段がすでに提供されているJava 9で追加された2つの新しい要素Java 9では、@DeprecatedアノテーションにsinceとforRemovalという2つの新しい属性

  2. JavaにおけるCursorクラスの役割とは?マウスカーソル制御の基本を解説

    JavaのCursorクラスとはCursorクラスは、Objectクラスのサブクラスであり、画面上のポイント(指し示す位置)やインジケーター(表示標識)として定義されます。ユーザーがマウスを使ってシステムへの入力を選択・操作する際に、その位置を視覚的に示す重要な役割を担っています。GUIアプリケーションでは、状況に応じてカーソルの形状を変えることで、ユーザーに対して直感的なフィードバックを提供できます。例えば、処理中であることを伝える砂時計型のカーソルや、クリック可能な要素を示す手型のカーソルなどが代表的な例です。利用可能なカーソルの種類Cursorクラスには、あらかじめ定義されたさまざまなカ