java - 使用 java 和 Tika 的正则表达式将字符串拆分为数组

标签 java regex apache-tika

我正在尝试获取 Tika 输出(pdf 到文本)并将结果拆分为单词数组或字符组。

我正在使用类似的东西......

String str = contenthandler.toString();
  String[] splitArray = str.split("\\s+");

  for (String word : splitArray){
    System.out.println(word);
  }

但我没有在我期望的地方 split ——单词之间。我想保留换行符、页面、选项卡等......并且只删除空格。 Tika 的示例文本如下所示:

"...or supplemented except by a written instrument signed by both parties.  The unenforceability of any provision on this Agreement shall not affect the enforceability of any other provision of this Agreement.  Neither this Agreement nor the disclosure of any Confidential Information pursuant to this Agreement by any party shall restrict such party from disclosing any of its Confidential Information to any third party...."

我正在 http://java-regex-tester.appspot.com/ 上使用正则表达式

像 [^a-zA-Z] 这样的模式可以找到空格,而/s+ 则不能。我该如何与这些人分开?

最佳答案

制表符和换行符是空格。如果您只想分割一个或多个空格字符,您需要这样做

String[] splitArray = str.split(" +");

编辑

响应 OP 评论 - 看起来空格与 \s+ 不匹配。在这种情况下,单词之间的字符(空格)不是 [" ",\t, \n, \x0B, \f, \r\] 中的任何一个。 *。您可以尝试匹配 \b (这是单词边界)。要真正找出字符是什么 - 将字符串粘贴到一个好的文本编辑器中并查看原始字符(例如,在 Notepad++ 中,它将查看 -> 显示所有字符)。记下单词之间字符的十六进制代码并检查它是什么。

在 OP 测试后进行编辑

通过检查文本的十六进制表示形式(通过 edithex.com ),OP 确定空格字符是不间断空格 (0xA0)。因此,这段代码满足要求:

String[] splitArray = str.split("\xA0")

PDF 似乎通常将空格编码为标准空格 (0xA0) 以外的字符。这个blogpost意味着 PDF 可能不会将空格编码为标准空格(ASCII 代码 0x20 = 32)。\s 不会拾取的空格字符的各种选项 are here .

<小时/>

*在示例文本中,它们空格,但在复制/粘贴中必须已更改

关于java - 使用 java 和 Tika 的正则表达式将字符串拆分为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28026215/

相关文章:

java - 取消或关闭对话框时出现 nullpointerException 错误

C# 检查字符串中是否存在单词

regex - 使用正则表达式和 ffmpeg 获取视频的长度

solr - PDFBox 在单词中添加空格

java - 将 Map<Integer, Object> 转换为 Map<Integer, List<Object>>,而不使用 for 循环 (java)

java - 存储函数 - 发送/接收 boolean 值 - BD

java - 如何创建两个轴上都有日期的折线图?

Javascript 正则表达式 - 匹配域和任何可能的子域

java - 有没有办法在不卸载 tesseract 的情况下禁用 Tika 中的 OCR 模式

java - 多线程处理多个pdf文件