有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

一些元素1 |一些元素具有不同的长度2 |一些元素3 |一个元素4 |一些元素5| 元素1 |不同长度2 |元素3 | AnElementI'llIgnore4 |元素5|

并将其格式化为具有特定间距的列。我对java非常陌生,并且来自C++背景。不管怎样,我一直在考虑用正则表达式建立一个模式,然后寻找匹配项。我不确定正则表达式中用于标识特定字符(管道“|”)的语法是什么,以便确定模式

这似乎是一个好方法吗?如果是的话,模式的语法是什么。compile(“Regex语法”)是,我如何确定与之匹配


共 (5) 个答案

  1. # 1 楼答案

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

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

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

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

  2. # 2 楼答案

    你可以用绳子。split(stringregex)方法

  3. # 3 楼答案

    为什么不直接使用String.split()?e、 g

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

    (注意split()方法需要一个regexp,因此必须转义管道)

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

  4. # 4 楼答案

    我认为最简单的事情是:

    1. 将每行转换为一个带有字符串的数组。拆分(“|”)

    2. 创建一个包含每列长度的整数数组

    3. 创建StringBuilder以保存重新格式化的行

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

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

  5. # 5 楼答案

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

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

    简言之:

    1. 使用String.split()进行拆分
    2. 在数组上循环并使用StringUtils重新格式化