模式和匹配:格式化文本文件

时间:2012-07-23 15:10:09

标签: java regex io

我正在尝试使用看起来像这样的输入文件:

SomeElement1 | SomeElementWithDifferentLength2 | SomeElement3 | AnElementI'llIgnore4 | Something5 | 元素1 | DifferentLength2 |元素3 | AnElementI'llIgnore4 |元素5 |

并将其格式化为具有特定间距的列。我是java的新手,来自C ++背景。无论如何,我正在寻找与正则表达式建立模式,然后寻找匹配。我不确定正则表达式中的语法是什么来识别特定字符(管道“|”)所以我可以确定模式。

这看起来是一个好方法,如果是这样,Pattern.compile(“正则表达式语法”)的语法是什么,我将如何确定与它的匹配?

5 个答案:

答案 0 :(得分:3)

我认为最简单的事情是:

  1. 使用String.split(“|”)

  2. 将每一行转换为数组
  3. 创建一个包含每列长度的整数数组

  4. 创建一个StringBuilder来保存重新格式化的行

  5. 从第1行循环遍历数组,将每个字符串填充到第2行中数组的长度,然后将其附加到StringBuilder。

  6. 如果字段可能有嵌入式管道,因此你必须有一些机制来转义它们,那么你必须编写代码来自己解析列,而不是split()。我想你可以为此写一个正则表达式,但我认为这不仅仅是循环查找管道的字符。

答案 1 :(得分:1)

为什么不简单地使用String.split()? e.g。

String[] res = line.split("\\|");

(请注意,split()方法采用正则表达式,因此您必须转义管道。)

然后,您可以遍历结果数组并使用String.format()输出填充/格式化等。

答案 2 :(得分:0)

您可以使用String.split(String regex)方法。

答案 3 :(得分:0)

如果您可以将文件内容作为字符串读取,那么您可以执行以下任何操作:

  • 直接替换“|”具有一定数量的空格:stringContents.replaceAll("\\|", " ")

  • 将字符串拆分为“|”:stringContents.split("\\|");

记住,“|”是正则表达式中的特殊字符,并被解释为“OR”操作,这就是为什么它需要使用反向斜杠(即两个向后斜杠)进行转义

答案 4 :(得分:0)

不要重新发明轮子。使用Apache Commons Lang并检查StringUtils。

我假设你想要固定长度的列;该库提供了leftPad()或rightPad()方法以及一堆其他字符串操作。

简而言之:

  1. 使用String.split()
  2. 拆分
  3. 循环遍历数组并使用StringUtils
  4. 重新格式化