如何检测文本是否包含 [FSI]*[PDI]

How to detect if text contains [FSI]*[PDI]

Android Studio logcat 传入通知消息显示如下 []message[] .

我复制并粘贴到 .txt 文件,它显示 FSImessagePDI .

“FSI”和“PDI”这种字符是什么?我如何检测文本何时包含它们?

这些是用于双向文本和 显式方向隔离格式化字符 组的一部分的特殊 unicode 字符。它们在您的示例中用于轻松插入方向未知的文本片段。这可以通过将片段包装在 FSI 和 PDI 中来完成。有关详细信息,请咨询 Unicode Bidirectional Algorithm

要检测它们,我们需要知道它们的 unicode 表示形式:

  • 第一个强分离 (FSI) 由 0x2068 (UTF-16) 表示。
  • 流行定向隔离 (PDI) 由 0x2069 (UTF-16) 表示。

现在我们可以使用正则表达式 \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));
}

输出: