java - 为什么我的方法使用 String.replace 和 HashMap 不替换字符串?

标签 java string replace

我正在尝试编写一个小类来转义 XML 文档中的字符。我正在使用 xpath 获取 XML 文档的节点,并将每个节点传递给我的类。但是,它不起作用。我想改变:

"I would like a burger & fries."

"I would like a burger & fries."

这是我类(class)的代码:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class MyReplace{
    private static final HashMap<String,String> xmlCharactersToBeEscaped;
    private Iterator iterator;
    private String newNode;
    private String mapKey;
    private String mapValue;

    static {
        xmlCharactersToBeEscaped = new HashMap<String,String>();
        xmlCharactersToBeEscaped.put("\"","&quot;");
        xmlCharactersToBeEscaped.put("'","&apos;");
        xmlCharactersToBeEscaped.put("<","&lt;");
        xmlCharactersToBeEscaped.put(">","&gt;");
        xmlCharactersToBeEscaped.put("&","&amp;");
    }

    public String replaceSpecialChar(String node){
        if(node != null){
            newNode = node;
            iterator = xmlCharactersToBeEscaped.entrySet().iterator();
            while(iterator.hasNext()){
                Map.Entry mapEntry = (Map.Entry) iterator.next();
                mapKey = mapEntry.getKey().toString();
                mapValue = mapEntry.getValue().toString();

                if(newNode.contains(mapKey)){
                    newNode = newNode.replace(mapKey,mapValue);
                }
            }
            return newNode;
        } else {
            return node;
        }
    }
}

发生的事情是它正在替换 map 中的第一个特殊字符,引号,并跳过其他所有字符。

最佳答案

你的解决方案太复杂了。

使用 StringEscapeUtils(Commons Lang 库的一部分)。它具有转义和反转义 XML、HTML 等的内置功能。 Commons lang 非常容易导入,以下示例来自最新的稳定版本 (3.4)。以前的版本使用不同的方法,请根据您的版本查找 Java 文档。它非常灵活,因此您可以用它做很多事情,而不仅仅是简单的转义和取消转义。

String convertedString = StringEscapeUtils.escapeXml11(inputString);

如果您使用的是 XML 1.0,他们还提供以下内容

String convertedString10 = StringEscapeUtils.escapeXml10(inputString);

在这里获取:https://commons.apache.org/proper/commons-lang/

Java 文档在这里 (3.4):https://commons.apache.org/proper/commons-lang/javadocs/api-3.4/org/apache/commons/lang3/StringEscapeUtils.html

关于java - 为什么我的方法使用 String.replace 和 HashMap 不替换字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30060869/

相关文章:

c++ - 程序总是产生相同的值(value)?

java - 使用 Java 仅在文件的第一行将计数器附加到多个相同的列字

java - LWUIT 触摸设备滚动问题

java - 生成 Lucene segments_N 文件

java - String.replace 不工作

python - 在不同情况下如何使用正则表达式修改 pandas 中的字符串

python - 删除其他列中出现的单词,Pandas

java - Spring Boot + Yaml + @PropertySource + @ConfigurationProperties + 属性源文件中的列表不注入(inject)

java - Spring boot 连接到使用 Arbiter 运行的 MongoDB 副本集

ios - 类型 'String' 的值没有成员 'stringByAppendingPathComponent'