我有来自ISO消息字段54的字符串:
1002566C0000000000001004566C0000000000001001566C000000000000
它分为部分/数据元素,如下所示,基于PostBridge接口规范的定义:
关于未定义特定数据元素的多达6个金额和相关帐户数据的
信息。每个金额是一个固定长度的字段,由5个数据元素组成:
< code >H 112金额(位置9-20)H 213f 214
10
02
566
C
000000000000
10
04
566
C
000000000000
10
01
566
C
000000000000
是否有一种简单的方法可以使用类似于JPos或其他类的TLVList
来解析这个字符串?或者我必须创建一个自定义实现来解析这个值。
发布于 2022-05-20 23:21:33
这里有一种方法。一个简单的正则表达式和一个记录(或一个类)。
record Info(String getAccount, String getAmountType, String getCurrencyCode,
String getSign, String getAmount){
@Override
public String toString() {
return """
Account: %s
AmountType: %s
Currency Code: %s
AmountSign: %s
Amount: %s
""".formatted(getAccount, getAmountType, getCurrencyCode,getSign,getAmount);
}
}
String s = "1002566C0000000000001004566C0000000000001001566C000000000000";
String regex = "String regex = "(\\d\\d)(\\d\\d)(\\d{3})(C|D)(\\d{12})";
List<Info> accts = new ArrayList<>();
Matcher m = Pattern.compile(regex).matcher(s);
while (m.find()) {
accts.add(new Info(m.group(1),m.group(2), m.group(3),m.group(4),m.group(5)));
}
for (Info info : accts) {
System.out.println(info);
}
版画
Account: 10
AmountType: 02
Currency Code: 566
AmountSign: C
Amount: 000000000000
Account: 10
AmountType: 04
Currency Code: 566
AmountSign: C
Amount: 000000000000
Account: 10
AmountType: 01
Currency Code: 566
AmountSign: C
Amount: 000000000000
任何微调,例如裁剪记录类型或toString
,都应该是微不足道的。它确实假定记录的格式很好,每个记录的字符数是一致的。否则,对于缺少的组,regex就会失败。
https://stackoverflow.com/questions/72324780
复制相似问题