Java 訊息格式

David Mbochi Njonge 2023年1月30日 2022年4月26日
  1. 利用 MessageFormat 使用雙引號格式化訊息
  2. 利用 MessageFormat 使用 Unicode 字元格式化訊息
  3. 利用 MessageFormat 使用轉義序列格式化訊息
  4. 通過使用 MessageFormat 替換字元來格式化訊息
Java 訊息格式

在本教程中,我們將學習如何使用 Java API 提供的 Java MessageFormat 類來格式化訊息。格式化是將字元和字串動態插入訊息的過程,而 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

在接下來的部分中,我們將介紹四種不同的方法,我們可以使用這些方法在訊息中插入單引號,以確保我們的模式被成功格式化。

利用 MessageFormat 使用雙引號格式化訊息

要在使用 MessageFormat 格式化的訊息中新增單引號,我們應該在字串中使用兩個單引號'' 而不是單引號',如下所示。

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 使用轉義序列格式化訊息

此方法類似於使用雙引號的方法,但使用轉義序列\,它是一個前面帶有反斜槓的字元,用於插入一系列字元。我們可以通過在我們的模式中插入兩個引號轉義序列來插入一個單引號,如下所示。

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