【发布时间】:2023-12-26 22:46:02
【问题描述】:
我正在编写 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 在 java.lang.String.substring(String.java:1240)
\\ 是转义字符,我只需要一个 \
【问题讨论】:
-
您收到错误是因为您在更改字符串的同时通过字符串的长度进行循环。
-
哪一行抛出异常?我能说的是
strblob = strblob.replace(repCharin.substring(j, 1), repCharout.substring(j, 1));可能是strblob = strblob.replace(repCharin.substring(j, j+1), repCharout.substring(j, j+1)); -
我建议获取这些字符的字节表示并在字节模式收集中完全工作,而不是使用字符串操作。记住一些用多字节编码的字符。
-
初始化
repCharin和repCharout的.substring调用都是错误的——它们提取的字符串太短了一个字符。您应该抛弃这种废话,只需使用正确的字符串文字直接初始化repCharin和repCharout,恕我直言。
标签: java string special-characters