0

我有一个长度721如下的字符串:

String stmnt="27/08/2013 Cr 00000000000288.70 AMOUNT DEPOSITED FOR TELEPHONE EXPENSES  22/08/2013 Dr 00000000085000.00 PMT TO abcde BOHARA                     20/08/2013 Cr 00000000015844.38 BEING REFUND AMOUNT DEPOSITED OF RMDC IP20/08/2013 Cr 00000000047419.09 BEING REFUND AMOUNT DEPOSITED OF SKBBL I15/08/2013 Dr 00000000002900.00 PMT TO lkjhgd 09876543                  12/08/2013 Dr 00000000001723.00 PMT TO SELF                             12/08/2013 Cr 00000000025563.00 liuytrew /SALARY / 070 / 748392 lkoiuytr08/08/2013 Dr 00000000002000.00 PMT TO SELF                             07/08/2013 Dr 00000000000500.00 PMT TO 123456 nmnbvsgd                  29/07/2013 Cr 00000000002000.00 DE PO BY SELF                           ";

一个字符串的长度应为 72。在字符串stmnt中应该有 10 个语句,这意味着总长度720。字符串的第一条语句stmnt应该如下:

string should be ="27/08/2013 Cr 00000000000288.70 AMOUNT DEPOSITED FOR TELEPHONE EXPENSES ";

但问题是还要填充一个空格 ,如下所示:

irritated string="27/08/2013 Cr 00000000000288.70 AMOUNT DEPOSITED FOR TELEPHONE EXPENSES  ";

在第一个字符串上,所以这是让我恼火的问题。

一个字符串的定义如下:

 1. first 10 digits are : date with length 10 and startIndex 0
 2. next 4 digits are transaction type (CR/DR) `including spaces
    also`  and startIndex 10
 3. next 18 digits are Account Balance including one space on right
    side and startIndex 14
 4. and rest 40 digits are particular  startIndex 32

我的问题是我需要将 72 个字符串的长度拆分为定义部分的定义。

注意:我可以单独使用String.subString(),但需要解决所有字符串。因为我需要一次解析 721 长度的字符串。

更新:需要regex使所有字符串长度为 72 的代码。条件应如我在定义部分所述

4

1 回答 1

4

我会使用如下代码的正则表达式。我没有对此进行测试,因此您需要对其进行调整。使用正则表达式的好处是,如果固定长度的记录之间有额外的空格,它不会“介意”。

p = Pattern.compile("(\\d{2}/\\d{2}/\\d{4} (Cr|Dr) \\d{14}\\.\\d{2} .{50})");
m = p.matcher(bigRecord);

while(m.find()) {
    String record = m.group();
}

根据 Ingo 的评论进行编辑。建议的正则表达式只是对该数据集实际需要的粗略估计,因此几乎可以肯定需要进一步改进。

于 2013-10-29T19:08:31.290 回答