首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从ISO消息字符串中提取值

从ISO消息字符串中提取值
EN

Stack Overflow用户
提问于 2022-05-20 21:06:13
回答 1查看 87关注 0票数 1

我有来自ISO消息字段54的字符串:

代码语言:javascript
运行
复制
1002566C0000000000001004566C0000000000001001566C000000000000 

它分为部分/数据元素,如下所示,基于PostBridge接口规范的定义:

关于未定义特定数据元素的多达6个金额和相关帐户数据的

信息。每个金额是一个固定长度的字段,由5个数据元素组成:

  • 帐户类型(头寸1-2)
  • 金额类型(头寸3-4)
  • 货币代码(位置5-7)
  • 金额符号(位置8) - "C“或”D“

< code >H 112金额(位置9-20)H 213f 214

代码语言:javascript
运行
复制
10 
02
566
C
000000000000

10
04
566
C
000000000000

10
01
566
C
000000000000

是否有一种简单的方法可以使用类似于JPos或其他类的TLVList来解析这个字符串?或者我必须创建一个自定义实现来解析这个值。

EN

回答 1

Stack Overflow用户

发布于 2022-05-20 23:21:33

这里有一种方法。一个简单的正则表达式和一个记录(或一个类)。

代码语言:javascript
运行
复制
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);
}

版画

代码语言:javascript
运行
复制
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就会失败。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72324780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档