如何在 Java 中创建两个具有共享数据的数组

How to create two arrays with shared data in Java

首先,我需要这样做的原因是 Apache's Commons StringUtils 方法中的 API:

StringUtils.replaceEach(String text, String[] searchList, String[] replacementList) 

我想要做的是将所有 HTML 特殊字符编码替换为实际的特殊字符,这意味着 searchListreplacementList 数组将非常大。我怎样才能以一种易于阅读和维护的方式做到这一点?

是的,我可以创建两个数组,但如果我这样做,那么很容易出错。我怎么知道我没有遗漏特殊的编码,我有正确的位置等等。我宁愿有编码和字符并排的代码以避免任何错误。 我看了一个 HashMap 但是你只能得到键(编码)并且必须循环获取字符值,这不是很有效,特别是如果它是 运行 很多。对于必须拆分每个 运行.

的二维数组也是如此

假设文本长度为N,特殊字符个数为M,搜索列表长度为K。 使用HashMap,比较次数=N*K,交换次数M.

为了表现, 1. 您可以为 search/replacement 列表创建标签。然后扫描文本并标记每个条目(记录索引)。 N比较。 2. 现在你有 M 个索引可以替换为 K 个可能的字符。比较 = MK。交换 M。 比较 N + MK < N*K。交易所 M

希望对您有所帮助!

您的目标是什么类型的表现?如果您要替换 HTML 特殊字符,是否可以不缓存将编码的 HashMap 拆分为某种类型的两个静态最终变量中的特殊字符的结果?这仍然需要您承担处理 HashMap 的开销,但保存结果会阻止您 运行 每次调用该过程。像这样:

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

class MyStringReplaceCLass {
  private static final String[] encodings;
  private static final String[] specialCharacters;

  static {
      HashMap<String, String> characterEncoding = new HashMap<String, String>();
      characterEncoding.put("...", "...");
      characterEncoding.put("...", "...");

      // Put other encodings here as necessary

      encodings = new String[characterEncoding.size()];
      specialCharacters = new String[characterEncoding.size()];

      Map.Entry<String, String>[] entries = characterEncoding.entrySet();

      for (int i = 0; i < entries.length; i++) {
          encodings[i] = entries[i].getKey();
          specialCharacters[i] = entries[i].getValue();
      }
  }

  public String replaceEachEncoding(String text) {
      return StringUtils.replaceEach(String text, String[] searchList, String[] replacementList);
  }
}

从这里,您可以拨打

MyStringReplaceClass.replaceEachEncoding(myText)

我不完全确定这是否完全符合您的要求,但我觉得某种经过光照处理的地图将是最干净的解决方案。