Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于处理需要由其他特殊字符替换的特殊字符的Java代码_Java_String_Special Characters - Fatal编程技术网

用于处理需要由其他特殊字符替换的特殊字符的Java代码

用于处理需要由其他特殊字符替换的特殊字符的Java代码,java,string,special-characters,Java,String,Special Characters,我正在编写Java代码来处理从大型机接收到的字符串,该字符串包含需要用其他特殊字符替换的特殊字符,我的搜索字符是§{在其中,我需要将其替换为ä,我的输入示例是“0.201322.05.2017LM-R{der Dopp” 我的代码目前是 String repChar = "§ÄÖÜäüßö@[\\\\]~{¦}@[\\\\]{}~¦§ÄÖÜßäöü"; // Split String and Convert

我正在编写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();
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