java将字符串转换为16进制(如何将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;
}
测试数据及结果如下图
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com