我正在编写Java代码来处理从Mainframe接收的字符串,该字符串包含需要替换为其他特殊字符的特殊字符,我的搜索字符为§ÄÖÜäüßö@[\]~{¦}
,替换字符为@[\]{}~¦§ÄÖÜßäöü
所以如果字符串中包含{
,我需要将其替换为ä
,我的输入示例为"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)
\\是转义字符我只需要一个\
答案 0 :(得分:1)
代码
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"
。你在这里的问题(除了分离期间的错误索引)是你应该迭代输入字符串而不是你的字符。因为当您将Ä
替换为[
并将威胁[
替换为特殊字符后再次将其替换为Ä
时,您可能会遇到这种情况。
此外,单反斜杠应使用单反斜杠进行转义,因此要获得\
,您需要\\
希望它有所帮助!