在java中按长度拆分字符串作为我的要求

时间:2013-10-29 18:50:37

标签: java regex string substring

我有一个长度为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。条件应如我在定义部分

中所述

1 个答案:

答案 0 :(得分: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的评论编辑。建议的Regex只是对该数据集实际需要的粗略估计,因此几乎肯定需要进一步改进。