亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 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 關注
  • 266 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號