您的位置 首页 java

java 如何将String字符串的十六进制转换为汉字

偶然在写代码中,遇到String 字符串 里面存在非常多的16进制数据,如下图,需要将红框中的十六进制数据转换为对应的汉字,方便阅读。

采用的逻辑思路为,正则表达式匹配出所有的十六进制数据,然后进行转换为汉字,转换成功以后,用汉字替换相应的十六进制数据,然后再转换为String字符串,具体代码见下图

/**

* utf-8 十六进制编码为汉字

*

*/

public static String hexToString(String str) {

Pattern pattern = Pattern.compile(“(\\\\x[0-9A-Fa-f]{2})+”);

Matcher matcher = pattern.matcher(str);

Map<String,String> result = new TreeMap<>();

List<String> listKey = new LinkedList<>();

while (matcher.find()) {

String group = matcher.group(0);

String groupReplace = group.replaceAll(“\\\\x”, “”);

byte [] b = new byte[groupReplace.length() / 2];// 每两个字符为一个十六进制确定数字长度

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

// 将字符串每两个字符做为一个十六进制进行截取

String a = groupReplace.substring(i * 2, i * 2 + 2);

b[i] = (byte) Integer.parseInt(a, 16);// 将如e4转成十六进制字节,放入数组

}

try {

// 将字节数字以utf-8编码以字符串形式输出

String ccc = new String(b, “UTF-8”);

result.put(ccc,group);

listKey.add(ccc);

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}

if(listKey != null && listKey.size() > 0){

listKey.sort(Comparator.reverseOrder());

for (String key : listKey ) {

String value = result.get(key);

str = str.replace(value, key);

}

}

return str;

}

/**

* Unicode 转 汉字字符串

*

* @param str

* u6728

* @return ‘木’ 26408

*/

public static String unicodeToString(String str) {

Pattern pattern = Pattern.compile(“(\\\\u(\p{XDigit}{4}))”);

Matcher matcher = pattern.matcher(str);

char ch;

while (matcher.find()) {

// group 6728

String group = matcher.group(2);

// ch:’木’ 26408

ch = (char) Integer.parseInt(group, 16);

// group1 u6728

String group1 = matcher.group(1);

str = str.replace(group1, ch + “”);

}

return str;

}

测试数据及结果如下图

文章来源:智云一二三科技

文章标题:java 如何将String字符串的十六进制转换为汉字

文章地址:https://www.zhihuclub.com/181911.shtml

关于作者: 智云科技

热门文章

网站地图