2016-08-15 59 views
0

此代码用于检查是否在词串中HashMap的关键Android开关键

String[] arrs = message.split("(?<!) |(?<= {2})"); 

for(int j = 0 ; j < arrs.length; j++){ 

    if(AppConfig.hashMap.containsKey(arrs[j])){ 
     int s = AppConfig.hashMap.get(arrs[j]); 
    } else 
     text.append(" "+arrs[j]); 
} 

和HashMap中的

public static Map<String, Integer> hashMap = new HashMap<String, Integer>() 
{{ 
    put(":)", R.drawable.emoji_1f60a_64); 
    put(":D", R.drawable.emoji_1f601_64); 

    put(":'(", R.drawable.emoji_1f622_64); 
    put(":P", R.drawable.emoji_1f61c_64); 

    put(";)", R.drawable.emoji_1f609_64); 
    put(":O", R.drawable.emoji_1f632_64); 

    put("-_-", R.drawable.emoji_1f620_64); 
    put(":*", R.drawable.emoji_1f618_64); 
    put("<3", R.drawable.emoji_2764_64); 
    put("^_^", R.drawable.emoji_2764_64); 
}}; 

现在它可以替代用:)绘制emogi但是当我用另一种笑容symbole

的问题,当我在循环字符串,如果在HashMap中

比较发现,每一个字
if(AppConfig.hashMap.containsKey(arrs[j])) //found smile replace with emogi 

它检查是否有:)或者:当有d的字符串,但问题像那些

"","","","","","","","" 

笑脸符号,以便HashMap的将是

public static Map<String, Integer> hashMap = new HashMap<String, Integer>() 
{{ 
    put("", R.drawable.emoji_1f60a_64); 
    put("", R.drawable.emoji_1f601_64); 

    put("", R.drawable.emoji_1f622_64); 
    put("", R.drawable.emoji_1f61c_64); 

    put("", R.drawable.emoji_1f609_64); 
    put("", R.drawable.emoji_1f632_64); 

    put("", R.drawable.emoji_1f620_64); 
    put("", R.drawable.emoji_1f618_64); 
}}; 

在这里,我有这个字符串

嗨,你好吗?

现在

时检查是否有HashMap的关键等于或... 通过

if(AppConfig.hashMap.containsKey(arrs[j]))

它的失败,并说这个字符串没有钥匙

回答

0

您可以创建一个动态格局从hashmap中的值(并重用它,因为它为每次执行创建一个模式是昂贵的)。

看看https://stackoverflow.com/a/1326962/6709113

例如:

package aa; 

import java.util.HashMap; 
import java.util.Map; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

import org.apache.commons.lang3.StringUtils; 

public class Test { 
     public static String replaceMultipleStrings(String message) { 
     Map<String,String> tokens = new HashMap<String,String>(); 
     tokens.put("Garfield", "--Garfield--"); 
     tokens.put("", "----"); 
     tokens.put("", "----"); 
     tokens.put("", "----"); 

     // Create pattern of the format "(cat|beverage)" 
     String patternString = "(" + StringUtils.join(tokens.keySet(), "|") + ")"; 
     Pattern pattern = Pattern.compile(patternString); 
     Matcher matcher = pattern.matcher(message); 

     StringBuffer sb = new StringBuffer(); 
     while(matcher.find()) { 
      matcher.appendReplacement(sb, tokens.get(matcher.group(1))); 
     } 
     matcher.appendTail(sb); 

     String result = sb.toString(); 

     System.out.println(result); 

     return result; 
     } 


     public static void main(String[] args) 
     { 
     replaceMultipleStrings("hi how are you, my friend Garfield ?"); 
     } 

} 

的结果是:“嗨,你怎么样,我的朋友--Garfield-- ---- ---- - - ?”

如果需要性能,HashMap和Pattern创建应该只进行一次。

+0

我该如何为我的微笑创建图案? – medo