Java全角半角

在日常的开发中,我们经常会遇到需要处理字符的情况,而全角半角问题就是其中一个比较常见的问题。全角(全角字符)是指一个字符占用两个标准字符位置,而半角(半角字符)是指一个字符占用一个标准字符位置。

1. 什么是全角和半角

在计算机中,每个字符都对应着一个唯一的编码,而全角和半角字符的编码是不同的。在ASCII编码中,只有半角字符,而在Unicode编码中,既包含了半角字符,也包含了全角字符。

半角字符的编码范围是0x0020~0x007E,而全角字符的编码范围是0xFF01~0xFF5E。全角字符相对于半角字符来说,编码值要大。

2. Java中的全角半角转换

在Java中,我们可以使用 java.text.Normalizer 类来进行全角半角转换。该类提供了 normalize 方法,可以将文本中的全角字符转换为半角字符,或将半角字符转换为全角字符。

下面是一个示例代码:

import java.text.Normalizer;

public class FullHalfWidthConverter {
    public static String toHalfWidth(String input) {
        return Normalizer.normalize(input, Normalizer.Form.NFKC);
    }

    public static String toFullWidth(String input) {
        return Normalizer.normalize(input, Normalizer.Form.NFKC);
    }

    public static void main(String[] args) {
        String fullWidthText = "Java 全角半角";
        String halfWidthText = "Java 全角半角";

        String convertedHalfWidthText = toHalfWidth(fullWidthText);
        String convertedFullWidthText = toFullWidth(halfWidthText);

        System.out.println(convertedHalfWidthText);
        System.out.println(convertedFullWidthText);
    }
}

在上面的示例代码中,我们定义了一个 FullHalfWidthConverter 类,其中包含了 toHalfWidthtoFullWidth 两个静态方法,用于将输入的文本进行全角半角转换。

main 方法中,我们定义了两个字符串 fullWidthTexthalfWidthText,分别表示全角文本和半角文本。然后,我们分别调用 toHalfWidthtoFullWidth 方法进行转换,并将转换后的文本打印出来。

3. 全角半角转换的应用场景

全角半角转换在实际开发中有很多应用场景,下面介绍一些常见的应用场景:

3.1. 输入验证

在用户输入中,可能会包含全角字符和半角字符。为了保证数据的准确性,我们可以将用户输入的文本进行全角半角转换,统一为一种形式进行处理。

public class InputValidator {
    public static boolean isValidUsername(String username) {
        String convertedUsername = FullHalfWidthConverter.toHalfWidth(username);
        // 校验用户名是否合法
        // ...
    }

    public static boolean isValidPassword(String password) {
        String convertedPassword = FullHalfWidthConverter.toHalfWidth(password);
        // 校验密码是否合法
        // ...
    }
}

在上面的示例代码中,我们定义了一个 InputValidator 类,其中的 isValidUsernameisValidPassword 方法用于验证用户名和密码的合法性。在方法中,我们通过调用 FullHalfWidthConverter 类的 toHalfWidth 方法将输入的用户名和密码进行全角半角转换,然后再进行验证。

3.2. 字符宽度计算

有些场景下,我们需要计算文本的宽度,例如在界面布局或者打印输出时。由于全角字符和半角字符的宽度不同,所以我们需要将全角字符转换为半角字符,然后再计算宽度。

public class TextWidthCalculator {
    public static int calculateWidth(String text) {
        String convertedText = FullHalfWidthConverter.toHalfWidth(text);
        // 计算文本的宽度
        // ...
    }
}

在上面的示例代码中,我们定义了一个 TextWidthCalculator 类,其中