在另一个字符串中查找带括号的字符串

时间:2016-04-05 04:46:41

标签: android string

我正在开发Android应用程序,并希望将所有键入的文本表情符号转换为表情符号。

我准备了一个Hashmap,用他们的Emoticon的Unicode列出所有文本表情符号。

`

public static final HashMap<String, Integer> smileysMap = new HashMap<>();

// To add :) :-) :) :] =)
smileysMap.put(":-\\)", 0x1f60a);
smileysMap.put(":\\)", 0x1f60a);
smileysMap.put(":\\]", 0x1f60a);
smileysMap.put("=\\)", 0x1f60a)
String statusBody = "Hello World :)";

Set<String> set = smileysMap.keySet();
for (String s1 : set) {
      if(statusBody.contains(s1)){
           statusBody = statusBody.replaceAll(s1,smileysMap.get(s1));
      }
}

`

但条件if(statusBody.contains(s1))总是失败。然后我该怎么检查出来。

如果有人知道如何检查,请帮助我。

2 个答案:

答案 0 :(得分:1)

  

但条件if(statusBody.contains(s1))总是失败

当然!在地图中,您将这些作为键:

  • “: - \)”
  • “:\)”
  • “:\]”
  • “= \)”

如果你将这些变成逐字字符串,

  • “:-)”
  • “:)”
  • “:]”
  • “=)”

到目前为止一切顺利。现在让我们看看您的statusBody是否包含这些内容。您的statusBody

"Hello World :)"

是否包含“:-)”?要么 ”:)”?要么 ”:]”?或者“=)”?

这些都不是!

请参阅?

我认为您没有在地图中添加正确的内容。我想你的意思是:

  • “:-)”
  • “:)”
  • “:]”
  • “=)”

所以只需更改put方法'参数并解决问题!

我刚刚在您的代码中发现了另一个问题。 replaceAll有两个字符串参数,但是你给它一个字符串和一个int。你应该首先将int转换为字符串!

答案 1 :(得分:1)

嘿,我修改了你的代码并且工作正常

public static final HashMap<String, Integer> smileysMap = new HashMap<>();

// To add :) :-) :) :] =)
smileysMap.put(":-)", 0x1f60a);
smileysMap.put(":)", 0x1f60a);
smileysMap.put(":]", 0x1f60a);
smileysMap.put("=)", 0x1f60a)
String statusBody = "Hello World :)";

Set<String> set = smileysMap.keySet();
for (String s1 : set) {
      if(statusBody.contains(s1)){

            statusBody = statusBody.replace(s1,"any string");              
           /*replaceAll function will give you PatternSyntaxException: Incorrectly nested parentheses in regexp pattern near index 2: :) so i used replace function instead*/

      }
}

你也会得到这一行的错误 statusBody = statusBody.replaceAll(s1,smileysMap.get(s1)); 由于replace和replace方法接受2个字符串参数