【发布时间】:2018-03-08 18:00:46
【问题描述】:
【问题讨论】:
-
“从 pdf 文档中提取的字符串” - 如何从 PDF 中提取该字符串?字符串是否包含上标/下标,还是在提取过程中丢失了该细节?您问题的当前答案假定前者,但您向我提及字符串的起源似乎指向后者。
-
我认为这个问题是有效的.. +1 Mr john doe
【问题讨论】:
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 库。不好玩。
【讨论】:
是的。
一种方法是获取所有所需 Unicode 字符的列表,并以编程方式在您的 String 中搜索它们。
例如km²包含上标,Unicode值为u00B2
所以请按照以下方式检查您的String:
if(yourString.contains("\u00B2")){
System.out.println("yay");
}
【讨论】: