为了账号安全,请及时绑定邮箱和手机立即绑定

在 Java 中解码和替换字符串中的十六进制值

在 Java 中解码和替换字符串中的十六进制值

潇潇雨雨 2022-08-03 10:59:55
我在Java中有一个字符串,其中包含普通字符下的十六进制值。它看起来像这样:String s = "Hello\xF6\xE4\xFC\xD6\xC4\xDC\xDF"我想要的是将十六进制值转换为它们表示的字符,因此它看起来像这样:"HelloöäüÖÄÜß"有没有办法将所有十六进制值替换为它们表示的实际字符?我可以用这个实现我想要的,但我必须为每个角色做一行,它不包括未删除的角色:indexRequest = indexRequest.replace("\\xF6", "ö");indexRequest = indexRequest.replace("\\xE4", "ä");indexRequest = indexRequest.replace("\\xFC", "ü");indexRequest = indexRequest.replace("\\xD6", "Ö");indexRequest = indexRequest.replace("\\xC4", "Ä");indexRequest = indexRequest.replace("\\xDC", "Ü");indexRequest = indexRequest.replace("\\xDF", "ß");
查看完整描述

3 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

public static void main(String[] args) {

    String s = "Hello\\xF6\\xE4\\xFC\\xD6\\xC4\\xDC\\xDF\\xFF ";


    StringBuffer sb = new StringBuffer();

    Pattern p = Pattern.compile("\\\\x[0-9A-F]+");

    Matcher m = p.matcher(s);

    while(m.find()){           

        String hex = m.group();            //find hex values            

        int    num = Integer.parseInt(hex.replace("\\x", ""), 16);  //parse to int            

        char   bin = (char)num;            // cast int to char

        m.appendReplacement(sb, bin+"");   // replace hex with char         

    }

    m.appendTail(sb);

    System.out.println(sb.toString());


查看完整回答
反对 回复 2022-08-03
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

我会遍历每个 chacter 以找到 '\' 然后跳过一个字符,然后用接下来的两个字符开始一个方法。而不仅仅是在这里使用Michael Berry的代码:在Java中将一串十六进制转换为ASCII


查看完整回答
反对 回复 2022-08-03
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

您可以使用正则表达式来识别字符串中的所有十六进制代码,使用它们将它们转换为相应的字符,并在字符串中替换它们。下面是它的示例代码[xX][0-9a-fA-F]+Integer.parseInt(matcher.group().substring(1), 16)


import java.util.regex.Matcher;

import java.util.regex.Pattern;


public class HexToCharacter {

public static void main(String[] args) {

    String s = "HelloxF6xE4xFCxD6xC4xDCxDF";

    StringBuilder sb = new StringBuilder(s);

    Pattern pattern = Pattern.compile("[xX][0-9a-fA-F]+");

    Matcher matcher = pattern.matcher(s);

    while(matcher.find()) {

        int indexOfHexCode = sb.indexOf(matcher.group());

        sb.replace(indexOfHexCode, indexOfHexCode+matcher.group().length(), Character.toString((char)Integer.parseInt(matcher.group().substring(1), 16)));

    }

    System.out.println(sb.toString());

}

}


我已经使用您的字符串测试了这个正则表达式模式。如果您还有其他测试用例,那么您可能需要相应地更改正则表达式


查看完整回答
反对 回复 2022-08-03
  • 3 回答
  • 0 关注
  • 208 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信