猿问

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

我在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", "ß");


潇潇雨雨
浏览 223回答 3
3回答

四季花海

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());} 

慕尼黑5688855

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

慕勒3428872

您可以使用正则表达式来识别字符串中的所有十六进制代码,使用它们将它们转换为相应的字符,并在字符串中替换它们。下面是它的示例代码[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());}}我已经使用您的字符串测试了这个正则表达式模式。如果您还有其他测试用例,那么您可能需要相应地更改正则表达式
随时随地看视频慕课网APP

相关分类

Java
我要回答