1

我正在尝试获取如下所示的输入文件:

SomeElement1|SomeElementWithDifferentLength2|SomeElement3|AnElementI'llIgnore4|Something5| 元素1|不同长度2|元素3|一个元素我将忽略4|元素5|

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

这似乎是一个好方法,如果是这样,Pattern.compile("Regex syntax") 的语法是什么,我将如何确定与它的匹配?

4

5 回答 5

3

我认为最简单的事情是:

  1. 使用 String.split("|") 将每一行变成一个数组

  2. 使用每列的长度创建一个整数数组

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

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

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

于 2012-07-23T15:17:24.380 回答
1

为什么不简单地使用 String.split()?例如

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

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

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

于 2012-07-23T15:15:30.310 回答
0

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

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

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

请记住,“|” 是正则表达式中的特殊字符,被解释为“或”运算,这就是为什么它需要用反斜杠(即两个反斜杠)转义的原因

于 2012-07-23T15:19:56.823 回答
0

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

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

简而言之:

  1. 拆分使用String.split()
  2. 遍历数组并使用重新格式化StringUtils
于 2012-07-23T15:21:12.287 回答
0

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

于 2012-07-23T15:17:25.760 回答