如何在 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 特殊字符编码替换为实际的特殊字符,这意味着 searchList
和 replacementList
数组将非常大。我怎样才能以一种易于阅读和维护的方式做到这一点?
是的,我可以创建两个数组,但如果我这样做,那么很容易出错。我怎么知道我没有遗漏特殊的编码,我有正确的位置等等。我宁愿有编码和字符并排的代码以避免任何错误。 我看了一个 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)
我不完全确定这是否完全符合您的要求,但我觉得某种经过光照处理的地图将是最干净的解决方案。
首先,我需要这样做的原因是 Apache's Commons StringUtils 方法中的 API:
StringUtils.replaceEach(String text, String[] searchList, String[] replacementList)
我想要做的是将所有 HTML 特殊字符编码替换为实际的特殊字符,这意味着 searchList
和 replacementList
数组将非常大。我怎样才能以一种易于阅读和维护的方式做到这一点?
是的,我可以创建两个数组,但如果我这样做,那么很容易出错。我怎么知道我没有遗漏特殊的编码,我有正确的位置等等。我宁愿有编码和字符并排的代码以避免任何错误。 我看了一个 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)
我不完全确定这是否完全符合您的要求,但我觉得某种经过光照处理的地图将是最干净的解决方案。