我正在编写 Java 代码来处理从大型机接收的字符串,该字符串包含需要由其他特殊字符替换的特殊字符,我的搜索字符§ÄÖÜäüßö@[]~{¦}
并且替换字符@[]{}~¦§ÄÖÜßäöü
,因此如果字符串中有{
,我需要将其替换为ä
并且我的输入示例"0.201322.05.2017LM-R{der Dopp"
我的代码目前是
String repChar = "§ÄÖÜäüßö@[\\]~{¦}@[\\]{}~¦§ÄÖÜßäöü";
// Split String and Convert
String repCharin = repChar.substring(0, repChar.length()/2-1);
String repCharout = repChar.substring(repChar.length()/2, repChar.length()-1);
String strblob = new String(utf8ContentIn);
// Convert
for (int j=0; j < repCharin.length();j++) {
strblob = strblob.replace(repCharin.substring(j, 1), repCharout.substring(j, 1));
}
byte [] utf8Content = strblob.getBytes();
但它会产生以下错误
java.lang.StringIndexOutOfBoundsException at java.lang.String.substring(String.java:1240(
\\是转义字符,我只需要一个\
代码
String utf8ContentIn = "0.201322.05.2017LM-R{der Dopp";
String repChar = "§ÄÖÜäüßö@[\]~{¦}@[\]{}~¦§ÄÖÜßäöü";
// Split String and Convert
String repCharin = repChar.substring(0, repChar.length() / 2);
String repCharout = repChar.substring(repChar.length() / 2, repChar.length());
String strblob = new String(utf8ContentIn);
String output = strblob.chars().mapToObj(c -> {
char ch = (char) c;
int index = repCharin.indexOf(c);
if (index != -1) {
ch = repCharout.charAt(index);
}
return String.valueOf(ch);
}).collect(Collectors.joining());
System.out.println(output);
将按预期打印"0.201322.05.2017LM-Räder Dopp"
。您在这里的问题(除了分离过程中不正确的索引(是您应该迭代输入字符串而不是字符。因为当您将Ä
替换为[
并在威胁后再次[
为特殊字符并第二次替换为Ä
时,您可能会遇到这种情况。
应使用单反斜杠进行转义,因此要获得,您需要
\
希望对您有所帮助!