如何检测文本是不是包含 [FSI]*[PDI]
Posted
技术标签:
【中文标题】如何检测文本是不是包含 [FSI]*[PDI]【英文标题】:How to detect if text contains [FSI]*[PDI]如何检测文本是否包含 [FSI]*[PDI] 【发布时间】:2021-09-04 07:02:46 【问题描述】:用于传入通知消息的 android Studio logcat 显示如下 []message[] 。
我复制并粘贴到 .txt 文件,它显示 FSImessagePDI。
这种字符“FSI”和“PDI”是什么?以及如何检测文本何时包含它们?
【问题讨论】:
这些是用于双向文本的特殊字符类型。你想如何检测它们?如果它们存在于 Java 中的字符串中? @Matt,在whatsapp群聊中,当有人提到你为@时,内容通知会显示[]Matt[]。我想检测何时有人提到我。 【参考方案1】:这些是用于双向文本的特殊 unicode 字符,是 Explicit Directional Isolate Formatting Characters 组的一部分。它们在您的示例中用于轻松插入方向未知的文本片段。这可以通过将片段包装在 FSI 和 PDI 中来完成。更多信息请咨询Unicode Bidirectional Algorithm。
要检测它们,我们需要知道它们的 unicode 表示:
0x2068
(UTF-16) 表示的第一个强隔离 (FSI)。
以0x2069
(UTF-16) 表示的流行定向隔离 (PDI)。
现在我们可以使用正则表达式\u2068(.*?)\u2069
来提取包装的内容:
String input = "Hi \u2068Bob\u2069!\nHow is \u2068Alice\u2069?";
System.out.println(input);
Pattern p = Pattern.compile("\u2068(.*?)\u2069");
Matcher m = p.matcher(input);
while (m.find())
System.out.println(m.group(1));
输出:
【讨论】:
您能否更新当检测文本为 FSI/PDI 时返回 true/false 的方法的答案,而不是提取包装的内容。谢谢。 @CauCuKien 如果您不需要内容,则可以省略 while 循环。m.find()
如果找到某物则返回 true,否则返回 false。以上是关于如何检测文本是不是包含 [FSI]*[PDI]的主要内容,如果未能解决你的问题,请参考以下文章