字符串中的特殊字体替换为普通字体(大小写英文和阿拉伯数字)

*将字符串的大小写字母,数字中的特殊字体替换成普通字体

 * 拉丁字母:

 * 粗体、斜体、粗斜体、手写体、手写粗体、哥特体(德文尖角体)、

 * 双线体、哥特粗体、无衬线体、无衬线粗体、无衬线斜体、无衬线粗斜体、等宽字体

 *

 * 希腊字母与符号:

 * 粗体、斜体、粗斜体、无衬线粗体、无衬线粗斜体

 *

 * 数字:

 * 粗体、双线体、无衬线体、无衬线粗体、等宽字体

 */

public static String replaceMathAlphabets(String input) {

    Map<Integer, Character> unicodeMap = getUnicodeMap();

    StringBuilder output = new StringBuilder();

    for (int i = 0; i < input.length();) {

        int codePoint = input.codePointAt(i);

        char replacementChar = getOrDefault(unicodeMap, codePoint, (char) codePoint);

        output.append(replacementChar);

        i += Character.charCount(codePoint);

    }

    return output.toString();

}

public static <K, V> V getOrDefault(Map<K, V> map, K key, V defaultValue) {

    return map.containsKey(key) ? map.get(key) : defaultValue;

}

private static Map<Integer, Character> getUnicodeMap() {

    Map<Integer, Character> map = new HashMap<>()

    

    // 粗体

    //大写字母A-Z

    for (int i = 0x1D400, j = 'A'; i <= 0x1D419; i++, j++) {

        map.put(i, (char) j);

    }

    // 小写字母a-z

    for (int i = 0x1D41A, j = 'a'; i <= 0x1D433; i++, j++) {

        map.put(i, (char) j);

    }

    //希腊字母

    for (int i = 0x1D6A8, j = 'Α'; i <= 0x1D6C0; i++, j++) {

        map.put(i, (char) j);

    }

    for (int i = 0x1D6C2, j = 'α'; i <= 0x1D6DA; i++, j++) {

        map.put(i, (char) j);

    }

    // 数字0-9

    for (int i = 0x1D7CE, j = '0'; i <= 0x1D7D7; i++, j++) {

        map.put(i, (char) j);

    }

    // 斜体

    for (int i = 0x1D434, j = 'A'; i <= 0x1D44D; i++, j++) {

        map.put(i, (char) j);

    }

    for (int i = 0x1D44E, j = 'a'; i <= 0x1D467; i++, j++) {

        map.put(i, (char) j);

    }

    //希腊字母

    for (int i = 0x1D6E2, j = 'Α'; i <= 0x1D6FA; i++, j++) {

        map.put(i, (char) j);

    }

    for (int i = 0x1D6FC, j = 'α'; i <= 0x1D714; i++, j++) {

        map.put(i, (char) j);

    }

    // 粗斜体

    for (int i = 0x1D468, j = 'A'; i <= 0x1D481; i++, j++) {

        map.put(i, (char) j);

    }

    for (int i = 0x1D482, j = 'a'; i <= 0x1D49B; i++, j++) {

        map.put(i, (char) j);

    }

    //希腊字母

    for (int i = 0x1D71C, j = 'Α'; i <= 0x1D734; i++, j++) {

        map.put(i, (char) j);

    }

    for (int i = 0x1D736, j = 'α'; i <= 0x1D74E; i++, j++) {

        map.put(i, (char) j);

    }

    // 手写体

    for (int i = 0x1D49C, j = 'A'; i <= 0x1D4B5; i++, j++) {

        map.put(i, (char) j);

    }

    for (int i = 0x1D4B6, j = 'a'; i <= 0x1D4CF; i++, j++) {

        map.put(i, (char) j);

    }

    // 手写粗体

    for (int i = 0x1D4D0, j = 'A'; i <= 0x1D4E9; i++, j++) {

        map.put(i, (char) j);

    }

    for (int i = 0x1D4EA, j = 'a'; i <= 0x1D503; i++, j++) {

        map.put(i, (char) j);

    }

    // 哥特体(德文尖角体)

    for (int i = 0x1D504, j = 'A'; i <= 0x1D51D; i++, j++) {

        map.put(i, (char) j);

    }

    for (int i = 0x1D51E, j = 'a'; i <= 0x1D537; i++, j++) {

        map.put(i, (char) j);

    }

    // 哥特粗体

    for (int i = 0x1D56C, j = 'A'; i <= 0x1D585; i++, j++) {

        map.put(i, (char) j);

    }

    for (int i = 0x1D586, j = 'a'; i <= 0x1D59F; i++, j++) {

        map.put(i, (char) j);

    }

    // 双线体

    for (int i = 0x1D538, j = 'A'; i <= 0x1D551; i++, j++) {

        map.put(i, (char) j);

    }

    for (int i = 0x1D552, j = 'a'; i <= 0x1D56B; i++, j++) {

        map.put(i, (char) j);

    }

    //数字

    for (int i = 0x1D7D8, j = '0'; i <= 0x1D7E1; i++, j++) {

        map.put(i, (char) j);

    }

    // 无衬线体

    for (int i = 0x1D5A0, j = 'A'; i <= 0x1D5B9; i++, j++) {

        map.put(i, (char) j);

    }

    for (int i = 0x1D5BA, j = 'a'; i <= 0x1D5D3; i++, j++) {

        map.put(i, (char) j);

    }

    //数字

    for (int i = 0x1D7E2, j = '0'; i <= 0x1D7EB; i++, j++) {

        map.put(i, (char) j);

    }

    // 无衬线粗体

    for (int i = 0x1D5D4, j = 'A'; i <= 0x1D5ED; i++, j++) {

        map.put(i, (char) j);

    }

    for (int i = 0x1D5EE, j = 'a'; i <= 0x1D607; i++, j++) {

        map.put(i, (char) j);

    }

    //希腊字母

    for (int i = 0x1D756, j = 'Α'; i <= 0x1D76E; i++, j++) {

        map.put(i, (char) j);

    }

    for (int i = 0x1D770, j = 'α'; i <= 0x1D788; i++, j++) {

        map.put(i, (char) j);

    }

    //数字

    for (int i = 0x1D7EC, j = '0'; i <= 0x1D7F5; i++, j++) {

        map.put(i, (char) j);

    }

    // 无衬线斜体

    for (int i = 0x1D608, j = 'A'; i <= 0x1D621; i++, j++) {

        map.put(i, (char) j);

    }

    for (int i = 0x1D622, j = 'a'; i <= 0x1D63B; i++, j++) {

        map.put(i, (char) j);

    }

    // 无衬线粗斜体

    for (int i = 0x1D63C, j = 'A'; i <= 0x1D655; i++, j++) {

        map.put(i, (char) j);

    }

    for (int i = 0x1D656, j = 'a'; i <= 0x1D66F; i++, j++) {

        map.put(i, (char) j);

    }

    //希腊字母

    for (int i = 0x1D790, j = 'Α'; i <= 0x1D7A8; i++, j++) {

        map.put(i, (char) j);

    }

    for (int i = 0x1D7AA, j = 'α'; i <= 0x1D7C2; i++, j++) {

        map.put(i, (char) j);

    }

    // 等宽字体

    for (int i = 0x1D670, j = 'A'; i <= 0x1D689; i++, j++) {

        map.put(i, (char) j);

    }

    for (int i = 0x1D68A, j = 'a'; i <= 0x1D6A3; i++, j++) {

        map.put(i, (char) j);

    }

    //数字

    for (int i = 0x1D7F6, j = '0'; i <= 0x1D7FF; i++, j++) {

        map.put(i, (char) j);

    }

    return map;

}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值