gpt4 book ai didi

java - 如何将表示表情符号的 unicode 字符替换为冒号分隔的字符串表情符号?

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:29 24 4
gpt4 key购买 nike

我有一个 JSON 将所有 unicode 表情符号映射到冒号分隔的字符串表示形式(就像 twitter 使用的那样)。我已将该文件导入到 Pair< Character, String> 的 ArrayList 中,现在需要扫描 String 消息并将任何 unicode 表情符号替换为其等效的字符串。

我的转换代码如下:

  public static String getStringFromUnicode(Context context, String m) {
ArrayList<Pair<Character, String>> list = loadEmojis(context);
String formattedString="";
for (Pair p : list) {
formattedString = message.replaceAll(String.valueOf(p.first), ":" + p.second + ":");
}
return formattedString;
}

但当我将消息发送到服务器时,我总是得到 unicode 表情符号表示。

任何帮助将不胜感激,谢谢!!

最佳答案

如有疑问,请回到首要原则。

你有很多东西都嵌套在一起。我发现在这种情况下,解决问题的最佳方法是将其拆开,看看不同部分在做什么。这使您可以控制问题,并在需要的地方放置测试代码以查看数据的作用。

我最好的猜测是 replaceAll() 的行为不可预测;将表情符号字符串误解为其正则表达式分析的命令。

我建议将 replaceAll() 替换为您自己的执行相同操作的循环。由于我们正在使用 Unicode,因此我建议深入研究这一点。这个小代码示例将做与全部替换相同的事情,但是因为我是逐个字符地寻址字符串,所以无论字符串中有什么有趣的控件代码,它都应该可以工作。

String message = "This :-) is a test :-) message";
String find = ":-)";
String replace = "!";
int pos = 0;

//Replicates function of replaceAll without the regular expression analysis
pos = subPos(message,find);
while (pos != -1)
{
String tmp = message.substring(0,pos);
tmp = tmp + replace;
tmp = tmp + message.substring(pos+find.length());
message = tmp;
pos = subPos(message,find);
}
System.out.println(message);


-- Snip --

//Replicates function of indexOf
public static int subPos(String str, String sub)
{
for (int i = 0; i < str.length() - (sub.length() - 1); i++)
{
int j;
for (j = 0; j < sub.length(); j++)
{
System.out.println(i + j);
if (str.charAt(i + j) != sub.charAt(j))
break;
}
if (j == sub.length())
return i;
}
return -1;
}

希望对您有所帮助。 :-)

关于java - 如何将表示表情符号的 unicode 字符替换为冒号分隔的字符串表情符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34312014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com