2016-07-13 7 views
1

データを一致させて新しい値に置き換えますが、5908行以上のデータをHashMapに配置したいとします。それはエラーが出ます。この問題または別の解決方法を解決するには?HashMapの問題を使用して5908以上のデータ行にマッピングする

String str = "aaa bob ccc ddd ....."; 
HashMap<String, String> map = new HashMap<>(); 
map.put("aaa","eee"); // data that I would like to match and replace it 
map.put("ddd","fff"); 
.  
.  
. // more than 5908 lines 
. 
.  
map.put("zzz"."yyy"); 

Pattern pattern = Pattern.compile("([a-zA-Z_]+)"); 
Matcher matcher = pattern.matcher(str) // matching process 

StringBuffer sb = new StringBuffer(); 
while(matcher.find()) { // if found and replace 
    String replace = map.get(matcher.group()); 
    if (replace == null) { // if not just print it back 
     replace = matcher.group(); 
    } 
    matcher.appendReplacement(sb, replace + ""); 
} 
matcher.appendTail(sb); 
System.out.println(sb); 

答えて

3

ハッシュマップに関しては、5908には何の表明もありません。単純に64kB limit on the bytecode size of any one methodがあります。

map.putに複数の方法で電話をかけることができます。 1メソッドあたり5000コール。それは特にきれいではなく、維持するのが簡単ではありません。

文字列とそれに対応する置換えを外部ストレージに入れることを検討する必要があります。実行時にハッシュマップにロードするファイルまたはデータベース。

関連する問題