>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 24022 个阅读者 刷新本主题
 * 贴子主题:  native2ascii.exe 的Java实现类 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2024-04-15 03:18:38     消息  查看  搜索  好友  邮件  复制  引用

package util;

/**
* native2ascii.exe Java code implementation.
*
* @author
* @version 1.0
*/
public class Native2AsciiUtils {

/**
* prefix of ascii string of native character
*/
private static String PREFIX = "\\u";

/**
* Native to ascii string. It's same as execut native2ascii.exe.
*
* @param str
*            native string
* @return ascii string
*/
public static String native2Ascii(String str) {
char[] chars = str.toCharArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < chars.length; i++) {
sb.append(char2Ascii(chars[i]));
}
return sb.toString();
}

/**
* Native character to ascii string.
*
* @param c
*            native character
* @return ascii string
*/
private static String char2Ascii(char c) {
if (c > 255) {
StringBuilder sb = new StringBuilder();
sb.append(PREFIX);
int code = (c >> 8);
String tmp = Integer.toHexString(code);
if (tmp.length() == 1) {
sb.append("0");
}
sb.append(tmp);
code = (c & 0xFF);
tmp = Integer.toHexString(code);
if (tmp.length() == 1) {
sb.append("0");
}
sb.append(tmp);
return sb.toString();
} else {
return Character.toString(c);
}
}

/**
* Ascii to native string. It's same as execut native2ascii.exe -reverse.
*
* @param str
*            ascii string
* @return native string
*/
public static String ascii2Native(String str) {
StringBuilder sb = new StringBuilder();
int begin = 0;
int index = str.indexOf(PREFIX);
while (index != -1) {
sb.append(str.substring(begin, index));
sb.append(ascii2Char(str.substring(index, index + 6)));
begin = index + 6;
index = str.indexOf(PREFIX, begin);
}
sb.append(str.substring(begin));
return sb.toString();
}

/**
* Ascii to native character.
*
* @param str
*            ascii string
* @return native character
*/
private static char ascii2Char(String str) {
if (str.length() != 6) {
throw new IllegalArgumentException(
"Ascii string of a native character must be 6 character.");
}
if (!PREFIX.equals(str.substring(0, 2))) {
throw new IllegalArgumentException(
"Ascii string of a native character must start with \"\\u\".");
}
String tmp = str.substring(2, 4);
int code = Integer.parseInt(tmp, 16) << 8;
tmp = str.substring(4, 6);
code += Integer.parseInt(tmp, 16);
return (char) code;
}

}



程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->集合(上)
  JavaWeb开发-->使用Session(Ⅰ)
  JSP与Hibernate开发-->映射组成关系
  Java网络编程-->RMI框架
  精通Spring-->绑定CSS样式
  Vue3开发-->虚拟DOM和render()函数
  [求助] 如何观看孙老师的课程视频
  面试官:NIO的优化实现原理了解吗?图文结合教你如何正确避坑
  Java设计模式: 里氏替换原则和合成复用原则详解
  Java如何遍历Enumeration
  用VisualVM远程监控Java进程
  我是如何把一个15分钟的程序优化到了10秒的
  Java关键字final、static使用总结
  18 张图弄懂面试官必问的一致性哈希
  JDK14的新特性
  害怕面试被问HashMap?
  Java设计模式:组合模式
  Java入门实用代码:查看线程是否存活
  Java入门实用代码:获取远程文件大小
  Java入门实用代码:打印平行四边形
  Java入门实用代码: 方法重载
  更多...
 IPIP: 已设置保密
树形列表:   
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。