用于处理需要由其他特殊字符替换的特殊字符的Java代码
我正在编写Java代码来处理从大型机接收到的字符串,该字符串包含需要用其他特殊字符替换的特殊字符,我的搜索字符是用于处理需要由其他特殊字符替换的特殊字符的Java代码,java,string,special-characters,Java,String,Special Characters,我正在编写Java代码来处理从大型机接收到的字符串,该字符串包含需要用其他特殊字符替换的特殊字符,我的搜索字符是§{在其中,我需要将其替换为ä,我的输入示例是“0.201322.05.2017LM-R{der Dopp” 我的代码目前是 String repChar = "§ÄÖÜäüßö@[\\\\]~{¦}@[\\\\]{}~¦§ÄÖÜßäöü"; // Split String and Convert
§{
在其中,我需要将其替换为ä
,我的输入示例是“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();
String repChar=“§ÄÜääßö@[\\\\\\]~{}@[\\\\\\\\]{}}§§ÄÜßäö”;
//拆分字符串并转换
字符串repCharin=repChar.substring(0,repChar.length()/2-1);
字符串repCharout=repChar.substring(repChar.length()/2,repChar.length()-1);
String strblob=新字符串(utf8ContentIn);
//皈依
对于(int j=0;j
但它会产生以下错误
java.lang.StringIndexOutOfBoundsException位于
子字符串(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”
。您这里的问题(除了分离期间不正确的索引)是,您应该迭代输入字符串而不是字符。因为在将Ä
替换为[
以及在威胁之后,您可能会遇到这种情况[
再次作为特殊字符,并将其第二次替换为Ä
此外,单反斜杠应该用单反斜杠转义,因此要获得\
,您需要\\
希望能有帮助!您会遇到错误,因为您在更改字符串时通过字符串的长度进行循环。哪一行引发异常?我能说的是
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
调用都是错误的——它们提取的字符串太短了一个字符。您应该放弃不要胡说八道,直接用正确的字符串文本IMHO初始化repCharin
和repCharout
。