簡體   English   中英

如何在Java中使用共享數據創建兩個數組

[英]How to create two arrays with shared data in Java

首先,我需要這樣做的原因是因為Apache的Commons StringUtils方法中的API:

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

我想要做的是與實際的特殊字符,這意味着替換所有的HTML特殊字符編碼searchListreplacementList陣列將是相當大的。 我該如何以一種易於閱讀和維護的方式來做到這一點?

是的,我可以創建兩個數組,但是如果執行此操作,那么很容易出錯。 我怎么知道我沒有丟失特殊的編碼,我的位置正確等等。 我寧願有一些編碼和字符並排的代碼,以避免出現任何錯誤。 我看了看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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM