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



我正在编写 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"。您在这里的问题(除了分离过程中不正确的索引(是您应该迭代输入字符串而不是字符。因为当您将Ä替换为[并在威胁后再次[为特殊字符并第二次替换为Ä时,您可能会遇到这种情况。

此外,单反斜杠

应使用单反斜杠进行转义,因此要获得,您需要\

希望对您有所帮助!

最新更新