Java实现零宽字符和字符串之间的相互转换

如题,上网找了一圈发现都是用JavaScript实现的,只好自己将JavaScript实现的代码转为Java代码实现:

// String -> 零宽字符
public static String strToZeroWidth(String str){
    String collect = Arrays.stream(str.split(""))
        .map(item -> Integer.toBinaryString(item.charAt(0)))
        .collect(Collectors.joining(" "));
    String result = Arrays.stream(collect.split(""))
        .map(item -> {
            if (item.equals("1")) {
                return "\u200B";
            } else if (item.equals("0")) {
                return "\u200C";
            } else {
                return "\u200D";
            }
        })
        .collect(Collectors.joining(""));
    return result;
}

// 零宽字符 -> String
public static String zeroWidthToStr(String str){
    //去除非零宽字符,只对零宽字符进行转换
    String lkzf = str.replaceAll("[^\u200b-\u200f\uFEFF\u202a-\u202e]", "");
    String collect = Arrays.stream(lkzf.split(""))
        .map(item -> {
            if ("\u200B".equals(item)) {
                return "1";
            } else if ("\u200C".equals(item)) {
                return "0";
            } else {
                return " ";
            }
        })
        .collect(Collectors.joining(""));
    String result = Arrays.stream(collect.split(" "))
        .map(item -> "" + (char) Integer.parseInt(item, 2))
        .collect(Collectors.joining(""));
    return result;
}

// 测试
public static void main(String[] args) {
    String lkzf = strToZeroWidth("中间");
    System.out.println("lkzf = " + lkzf);
    String result1 = "零宽" + lkzf + "字符";
    System.out.println(result1);
    System.out.println(result1.length());
    String result2 = zeroWidthToStr(result1);
    System.out.println("result2 = " + result2);
}

输出:

image-20230116233514769
lkzf = ​‌‌​​​‌‌‌​‌​​‌​‍​‌‌​‌​‌​​​​​‌​‌‌
零宽​‌‌​​​‌‌‌​‌​​‌​‍​‌‌​‌​‌​​​​​‌​‌‌字符
36
result2 = 中间
posted @   harglo  阅读(581)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
· 用 C# 插值字符串处理器写一个 sscanf
点击右上角即可分享
微信分享提示