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

时间:2017-05-25 08:58:49

标签: java string special-characters

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

\\是转义字符我只需要一个\

1 个答案:

答案 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"。你在这里的问题(除了分离期间的错误索引)是你应该迭代输入字符串而不是你的字符。因为当您将Ä替换为[并将威胁[替换为特殊字符后再次将其替换为Ä时,您可能会遇到这种情况。

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

希望它有所帮助!