java 全角半角字符转换如何实现


在Java中实现全角字符和半角字符的转换,可以通过遍历字符串中的每个字符,并根据其ASCII码值进行相应的转换。以下是一个简单的实现方法:


public class FullHalfWidthConverter {

    // 半角转全角
    public static String toFullWidth(String input) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < input.length(); i++) {
            char c = input.charAt(i);
            if (c >= 33 && c <= 126) { // 半角字符范围
                c = (char) (c + 0xFEE0); // 转换为全角字符
            }
            sb.append(c);
        }
        return sb.toString();
    }

    // 全角转半角
    public static String toHalfWidth(String input) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < input.length(); i++) {
            char c = input.charAt(i);
            if (c >= 0xFF01 && c <= 0xFF5E) { // 全角字符范围(包括标点)
                c = (char) (c - 0xFEE0); // 转换为半角字符
            }
            sb.append(c);
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        String halfWidthStr = "abc123!@#";
        String fullWidthStr = "abc123!@#";

        System.out.println("半角转全角: " + toFullWidth(halfWidthStr));
        System.out.println("全角转半角: " + toHalfWidth(fullWidthStr));
    }
}

**注意**:

- 这个简单的实现只处理了基本的ASCII字符和对应的全角字符转换。对于其他特殊字符(如中文字符等),这个方法不会进行转换。

- 全角字符和半角字符的转换是通过在字符的ASCII码上加上或减去一个固定的偏移量(`0xFEE0`)来实现的。这个偏移量是基于Unicode编码中的对应关系得出的。

- 对于标点符号的全角转半角,由于全角标点符号的Unicode编码是连续的,并且与半角标点符号之间有一个固定的偏移量,因此可以通过类似的方式进行转换。但请注意,这个偏移量可能因Unicode编码版本的不同而有所差异。在上述代码中,我使用了`0xFF01`到`0xFF5E`这个范围来近似表示全角标点符号的Unicode编码范围,并假设它们与半角标点符号之间有一个`0xFEE0`的偏移量。这只是一个近似的处理方法,实际情况可能需要根据具体的Unicode编码表来调整。