作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个文本,里面有一些特殊字符,例如:
Nur bei guter \U25berwachung k\o25rperliche Belastung pr\u25fen und Sie entsprechend
我有一个表格,可以将这些映射到德语变音符号;编码为十六进制 unicode 字母。我试图在文本中替换它们,但我失败了......
对于\U25,所需的输出是 Ü
,对于\025 是 ö
,对于\u25 是 ü
。
我试过很多东西,举个例子
Pattern p = Pattern.compile("(\\\\[0-9A-Za-z]{3})", Pattern.MULTILINE);
Matcher matcher = p.matcher(v);
String replacement = "00FB";
while (matcher.find()) {
String match = matcher.group();
int hexToInt = Integer.parseInt(replacement, 16);
v = matcher.replaceFirst("" + hexToInt);
}
使用最后一行 v = matcher.replaceFirst(match, "Ü");
使我的程序永远挂起。我也尝试了 str.replace()
方法,没有用......
部分人物:
最佳答案
据我所知,这种编码不是标准编码。你可以像这样“巧妙地”实现它:
private static Map<String, String> CONVERSIONS = new HashMap<String, String>() {{
put("\\U25", "Ü");
put("\\o25", "ö");
put("\\u25", "ü");
}};
private static String convert(String str) {
for (Map.Entry<String, String> conversion : CONVERSIONS.entrySet()) {
str = str.replace(conversion.getKey(), conversion.getValue());
}
return str;
}
请注意,您不应使用基于正则表达式的 replaceAll()
- 只需使用纯文本匹配 replace()
方法(它仍然会替换所有出现的地方) .
然后简单地使用:
String str = convert("Nur bei guter \\U25berwachung k\\o25rperliche Belastung pr\\u25fen und Sie entsprechend");
System.out.println(str);
输出:
Nur bei guter Überwachung körperliche Belastung prüfen und Sie entsprechend
我使用了 map 的在线初始化,但您可以通过读取属性或 csv 或类似文件轻松调整 map 的初始化,这将使整个事情变得非常容易管理。
关于java - 替换字符串中的\a25之类的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37617494/
我是一名优秀的程序员,十分优秀!