如何检测文本是不是包含 [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]的主要内容,如果未能解决你的问题,请参考以下文章

如何在opencv中检测仅包含文本的图像是不是模糊

如何用python检测字符串是不是包含html代码?

5GS 协议栈 — PFCP 协议 — PDR 报文检测规则

Pentaho PDI/Kettle 从文本文件中读取多行

pdi检测记录哪里查

如何检测字符串是不是至少包含一个数字?