[英]How to create two arrays with shared data in Java
首先,我需要這樣做的原因是因為Apache的Commons StringUtils方法中的API:
StringUtils.replaceEach(String text, String[] searchList, String[] replacementList)
我想要做的是與實際的特殊字符,這意味着替換所有的HTML特殊字符編碼searchList
和replacementList
陣列將是相當大的。 我該如何以一種易於閱讀和維護的方式來做到這一點?
是的,我可以創建兩個數組,但是如果執行此操作,那么很容易出錯。 我怎么知道我沒有丟失特殊的編碼,我的位置正確等等。 我寧願有一些編碼和字符並排的代碼,以避免出現任何錯誤。 我看了看HashMap
但是然后您只能獲取鍵(編碼),並且必須循環獲取字符值,這並不是很有效,尤其是如果要運行很多的話。 對於必須拆分每次運行的二維數組,情況也是如此。
您想要什么類型的表現? 如果您要替換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)
我不確定這是否完全符合您的要求,但是我認為某種經過輕加工的地圖將是最干凈的解決方案。
假設文本長度為N,特殊字符數為M,searchList長度為K。使用HashMap,比較數= N * K和交換數M。
為了提高性能,1.您可以為您的搜索/替換列表創建標簽。 然后掃描文本並標記每個條目(記錄索引)。 N比較。 2.現在,您有M個索引用K個可能的字符替換。 比較= MK 。交換M。比較N + M K <N * K。 交流M
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.