【问题标题】:How to check a string contains superscript or subscript in java如何在java中检查字符串是否包含上标或下标
【发布时间】:2018-03-08 18:00:46
【问题描述】:

有没有办法检查从pdf文档中提取的字符串是否包含上标或下标

例如:

【问题讨论】:

  • “从 pdf 文档中提取的字符串” - 如何从 PDF 中提取该字符串?字符串是否包含上标/下标,还是在提取过程中丢失了该细节?您问题的当前答案假定前者,但您向我提及字符串的起源似乎指向后者。
  • 我认为这个问题是有效的.. +1 Mr john doe

标签: java pdf unicode


【解决方案1】:

1 纯 Unicode

以下内容会将所有不在脚本上标/下标中的 Unicode 字符替换为空字符串,只留下上标/下标。

问题是存在没有分类的上标和下标,例如²³。请参阅维基百科。这些必须列出。

    System.out.println(s.replaceAll("(?U)[^²³\\p{InSuperscripts_and_Subscripts}]", ""));

boolean isSuperOrSubscript(int codePoint) {
    return Character.getName(codePoint).contains("SUPERSCRIPT")
        || Character.getName(codePoint).contains("SUBSCRIPT")
        || new String(new int[] {codePoint}, 0, 1)
                .matches("(?U)\\p{InSuperscripts_and_Subscripts}");
}

例如,上面将找不到

2 PDF 样式文本

PDF 是原始样式文本的“类型设置”。因此,上标可以是较小的文本,移动得更高一些。原来的<sup>...</sup>(说)已经没有了。也许人们可以通过 PDF 中的 font 资源识别出较小的字体。

在这种情况下,您可能会遍历文本元素并查看定位。例如使用 itext 库。不好玩。

【讨论】:

    【解决方案2】:

    是的。

    一种方法是获取所有所需 Unicode 字符的列表,并以编程方式在您的 String 中搜索它们。

    例如km²包含上标,Unicode值为u00B2

    所以请按照以下方式检查您的String

    if(yourString.contains("\u00B2")){
                System.out.println("yay");
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      相关资源
      最近更新 更多