Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据我的要求在java中按长度拆分字符串_Java_Regex_String_Substring - Fatal编程技术网

根据我的要求在java中按长度拆分字符串

根据我的要求在java中按长度拆分字符串,java,regex,string,substring,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

我有一个长度为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。在string
stmnt
中应该有10条语句,它表示总长度720。string
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。条件应如我在定义一节中所述

我将使用如下代码所示的正则表达式。我还没有测试过这个,所以你需要调整它。使用正则表达式的好处是,如果固定长度记录之间有额外的空格,它不会“介意”

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();
}

根据国际非政府组织的评论进行编辑。建议的正则表达式只是对该数据集实际需要的内容的粗略估计,因此几乎肯定需要进一步的改进。

我将使用如下代码所示的正则表达式。我还没有测试过这个,所以你需要调整它。使用正则表达式的好处是,如果固定长度记录之间有额外的空格,它不会“介意”

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();
}

根据国际非政府组织的评论进行编辑。建议的正则表达式只是对该数据集实际需要的内容的粗略估计,因此几乎肯定需要进一步改进。

您知道字符串每个部分的索引,为什么不在程序中使用主字符串的一些子字符串呢?请不要投反对票。我会尽量发表评论explain@Tdorno先生,我试过很多次了。这不是解析。这是银行账户的明细表。解析google“java.lang.String substring”@charlesforsyth的ISO8583消息格式有问题您是正确的,但如果是这样,那么您需要围绕它进行编码。确定字符串是否始终为73个字符,而不是有时为73个字符,然后想出一个解决方案来更正它。它总是第一次,或者说,是第一次还是第四次?您应该能够根据字符串的总长度(不是72的倍数)判断是否还有一个被截断。我个人会切换到正则表达式,使用日期字符串的开头作为新记录的开头。你知道字符串每个部分的索引,为什么不在你的程序中使用主字符串的一些子字符串呢?请不要否决投票。我会尽量发表评论explain@Tdorno先生,我试过很多次了。这不是解析。这是银行账户的明细表。解析google“java.lang.String substring”@charlesforsyth的ISO8583消息格式有问题您是正确的,但如果是这样,那么您需要围绕它进行编码。确定字符串是否始终为73个字符,而不是有时为73个字符,然后想出一个解决方案来更正它。它总是第一次,或者说,是第一次还是第四次?您应该能够根据字符串的总长度(不是72的倍数)判断是否还有一个被截断。我个人会切换到正则表达式,使用日期字符串的开头作为新记录的开头。这正是我所想的。我一直认为正则表达式是解析这样的字符串数据的方法。需要正则表达式来处理完整的721长度字符串。因为我需要一次解析,所以我认为我发布的内容(大部分)是您需要的。它将字符串分割成72个字符的记录,即使第一个记录有额外的空间(73个字符)。这正是我所想的。我一直认为正则表达式是解析这样的字符串数据的方法。需要正则表达式来处理完整的721长度字符串。因为我需要一次解析,所以我认为我发布的内容(大部分)是您需要的。它将字符串拆分为72个字符的记录,即使第一个记录有额外的空间(73个字符)。