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](https://img2023.cnblogs.com/blog/2029892/202301/2029892-20230116233601634-485422692.png)
lkzf =
零宽字符
36
result2 = 中间
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
· 用 C# 插值字符串处理器写一个 sscanf