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());
}
}
我已经使用您的字符串测试了这个正则表达式模式。如果您还有其他测试用例,那么您可能需要相应地更改正则表达式
添加回答
举报