【问题标题】:Split by regex with no particular range按正则表达式拆分,没有特定范围
【发布时间】:2014-08-01 15:03:04
【问题描述】:

我在解析此文本时遇到问题。我想按唯一帐户# 拆分它。见下文:

Account#: 1
    Data1
    Data2
    Data3
Account#: 1
    Data4
    Data5
    Data6
Account#: 1
    Data7
    Data8
    Data9
Account#: 2
    Data10
    Data11
    Data12
Account#: 2
    Data13
    Data14
    Data15
Account#: 3
    Data16
    Data17
    Data18
Account#: 3
    Data19
    Data20
    Data21

结果应该在我的第一个索引中,它将由 Account#: 1 和 Data1-9 组成,然后在我的第二个索引 Account#: 2 和 Data 10-15 中,依此类推..(此处的“数据”由新行等)

我正在考虑使用拆分(正则表达式)但是,我怎样才能正则表达式帐户的范围#?正则表达式是否有可能匹配唯一值?

感谢您的回复。

【问题讨论】:

  • 为什么要特别使用正则表达式?我认为它们不是完成这项任务的好工具。
  • 为什么不能使用地图?
  • 因为这个文件太大了,如果我通过读取行​​来手动检查它,这将需要时间。我也有解析它的想法,但我想寻找其他使用 split 函数的选项。
  • @SyamS 我也试试看……谢谢
  • 我会使用BufferedReaderreadLine() 方法。你可以这样做:if(line.contains('#') && line.charAt(line.length()-1)!=currentAccountNo){ //change account number}

标签: java regex


【解决方案1】:

使用正则表达式仍需要读取/扫描文件。 reg exp 只是一种有效扫描数据的方法,一旦从文件中读取。

为什么不实现一些简单的东西来逐行读取文件。当您阅读它并遇到每个 Account # 时,将后面的数据写入该 account # 的唯一文件,或者写入内存数据结构,例如由 Account # 键入的 java.util.Map(如果数据将适合内存)。

如果您高效地编写此代码,将数据发送到每个帐户的输出文件#,您只需读取输入文件一次(无论如何,正则表达式方法都需要这样做),并且可以写入每个帐户文件,因为您检测到哪个帐户#数据是。如果文件未按帐户编号排序,您可以一次保持一定数量的文件输出流打开,仅在到达文件末尾或打开太多时关闭它们。如果您需要进一步附加到帐户# 的文件,只需以附加模式重新打开。输入文件可以是任何大小,处理它所花费的时间将与其大小成正比。

正则表达式用于查找数据中可定义的模式,而不是用于发现唯一值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-22
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    相关资源
    最近更新 更多