Java メッセージの形式

David Mbochi Njonge 2023年10月12日
  1. MessageFormat を利用して二重引用符を使用してメッセージをフォーマットする
  2. MessageFormat を利用した Unicode 文字を使用してメッセージをフォーマットする
  3. MessageFormat を利用したエスケープシーケンスを使用したメッセージのフォーマット
  4. MessageFormat を利用して文字を置き換えてメッセージをフォーマットする
Java メッセージの形式

このチュートリアルでは、JavaAPI によって提供される JavaMessageFormat クラスを使用してメッセージをフォーマットする方法を学習します。フォーマットは、文字と文字列をメッセージに動的に挿入するプロセスであり、MessageFormat はこの機能を提供します。

MessageFormat は、オブジェクト引数を使用して、オブジェクト引数が挿入される場所を示すパターンを使用してフォーマットされた文字列を形成します。

オブジェクト引数は、MessageFormat オブジェクトパラメータで渡される位置に基づいてパターンに挿入されます。MessageFormat の静的な format() メソッドを使用して、メッセージのフォーマット方法を学習します。

format() メソッドに渡される最初のパラメーターはパターンであり、その後に動的に文字列に挿入する文字列指定子に基づくオブジェクト引数が続きます。パターンに要素を挿入するときに、MessageFormat によって異なる解釈が行われる特定の文字を使用する場合があります。これにより、予想とは異なる結果が生じる可能性があります。

たとえば、MessageFormat を使用してフォーマットされているメッセージ内で you're などの文字列に一重引用符を使用すると、文字列 youre になります。一重引用符は、フォーマットされないセクションを示すために使用され、次の例のメッセージの残りのパターンはフォーマットされていないことに注意してください。

import java.text.MessageFormat;

public class FormatString {
  public static void main(String[] args) {
    String name = "John";
    long age = 30;
    String message =
        MessageFormat.format("Hello {0}, you're turning {1} years old today", name, age);
    System.out.println(message);
  }
}

出力:

Hello John, youre turning {1} years old today

次のセクションでは、パターンが正常にフォーマットされるように、メッセージに一重引用符を挿入するために使用できる 4つの異なる方法について説明します。

MessageFormat を利用して二重引用符を使用してメッセージをフォーマットする

MessageFormat を使用してフォーマットされているメッセージに一重引用符を追加するには、以下に示すように、文字列で一重引用符'の代わりに 2つの一重引用符''を使用する必要があります。

import java.text.MessageFormat;

public class FormatString {
  public static void main(String[] args) {
    String name = "John";
    long age = 30;
    String message =
        MessageFormat.format("Hello {0}, you''re turning {1} years old today", name, age);
    System.out.println(message);
  }
}

出力:

Hello John, you're turning 30 years old today

二重引用符を追加した後に一重引用符が挿入され、残りのパターンは正しい値でフォーマットされることに注意してください。

MessageFormat を利用した Unicode 文字を使用してメッセージをフォーマットする

すべての文字には Unicode 表現があります。Java は Unicode 文字を読み取ることができるため、一重引用符の Unicode 表現を使用して、文字列に一重引用符を挿入できます。

import java.text.MessageFormat;

public class FormatString {
  public static void main(String[] args) {
    String name = "John";
    long age = 30;
    String message =
        MessageFormat.format("Hello {0}, you\u2019re turning {1} years old today", name, age);
    System.out.println(message);
  }
}

出力:

Hello John, you're turning 30 years old today

Unicode 文字\u2019 は文字列に一重引用符を追加し、メッセージの残りのパターンは正しい値でフォーマットされます。

MessageFormat を利用したエスケープシーケンスを使用したメッセージのフォーマット

この方法は、二重引用符を使用する方法と似ていますが、エスケープシーケンス\を使用します。これは、文字のシーケンスを挿入するために先頭に円記号が付いた文字です。以下に示すように、パターンに 2つの引用符エスケープシーケンスを挿入することで、単一引用符を挿入できます。

import java.text.MessageFormat;

public class FormatString {
  public static void main(String[] args) {
    String name = "John";
    long age = 30;
    String message =
        MessageFormat.format("Hello {0}, you\'\'re turning {1} years old today", name, age);
    System.out.println(message);
  }
}

出力:

Hello John, you're turning 30 years old today

MessageFormat を利用して文字を置き換えてメッセージをフォーマットする

文字列を操作しているので、文字列を同じままにして、replaceAll() メソッドを使用して一重引用符を二重引用符に置き換え、最終的に文字列に一重引用符を追加できます。

import java.text.MessageFormat;

public class FormatString {
  public static void main(String[] args) {
    String name = "John";
    long age = 30;
    String message = MessageFormat.format(
        "Hello {0}, you're turning {1} years old today".replaceAll("'", "''"), name, age);
    System.out.println(message);
  }
}

出力:

Hello John, you're turning 30 years old today
David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub