我正在开发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))
总是失败。然后我该怎么检查出来。
如果有人知道如何检查,请帮助我。
答案 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个字符串参数