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

TA貢獻1848條經驗 獲得超2個贊
我會遍歷每個 chacter 以找到 '\' 然后跳過一個字符,然后用接下來的兩個字符開始一個方法。而不僅僅是在這里使用Michael Berry的代碼:在Java中將一串十六進制轉換為ASCII

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());
}
}
我已經使用您的字符串測試了這個正則表達式模式。如果您還有其他測試用例,那么您可能需要相應地更改正則表達式
添加回答
舉報