2012-01-31 50 views
0

我正在使用beanshell来解析SWIFT数据,并需要通过引用这些SWIFT标签来提取值。现在,我静态地获取这些值这样:什么是beanshell for循环和数组的优雅解决方案

String getACRU = swiftMessage.getTagData("19A",":ACRU//"); 
String getANTO = swiftMessage.getTagData("19A",":ANTO//"); 
String getCHAR = swiftMessage.getTagData("19A",":CHAR//"); 
String getCOUN = swiftMessage.getTagData("19A",":COUN//"); 
String getEXEC = swiftMessage.getTagData("19A",":EXEC//"); 
String getISDI = swiftMessage.getTagData("19A",":ISDI//"); 
String getLADT = swiftMessage.getTagData("19A",":LADT//"); 
String getLEVY = swiftMessage.getTagData("19A",":LEVY//"); 
String getLOCL = swiftMessage.getTagData("19A",":LOCL//"); 
String getLOCO = swiftMessage.getTagData("19A",":LOCO//"); 
String getMARG = swiftMessage.getTagData("19A",":MARG//"); 
String getOTHR = swiftMessage.getTagData("19A",":OTHR//"); 
String getPOST = swiftMessage.getTagData("19A",":POST//"); 
String getREGF = swiftMessage.getTagData("19A",":REGF//"); 
String getSHIP = swiftMessage.getTagData("19A",":SHIP//"); 
String getSPCN = swiftMessage.getTagData("19A",":SPCN//"); 
String getSTAM = swiftMessage.getTagData("19A",":STAM//"); 
String getSTEX = swiftMessage.getTagData("19A",":STEX//"); 
String getTRAN = swiftMessage.getTagData("19A",":TRAN//"); 
String getTRAX = swiftMessage.getTagData("19A",":TRAX//"); 
String getVATA = swiftMessage.getTagData("19A",":VATA//"); 
String getWITH = swiftMessage.getTagData("19A",":WITH//"); 
String getCOAX = swiftMessage.getTagData("19A",":COAX//"); 
String getACCA = swiftMessage.getTagData("19A",":ACCA//"); 

我的问题是双重的:什么是能够完美地改写这个最好的办法,什么是最好的方式在BeanShell中添加一个方法/函数,将删除前三个字符,将逗号更改为一个句点,并且一旦所有这些值都已经从消息中解析出来,将它们全部添加起来?

回答

0

看来这工作得很好。商店,我需要的所有值的数组:

String [] tagArray = new String [] { ":ACRU//",":ANTO//",":CHAR//",":COUN//",":EXEC//",":ISDI//",":LADT//",":LEVY//",":LOCL//",":LOCO//",":MARG//",":OTHR//",":POST//",":REGF//",":SHIP//",":SPCN//",":STAM//",":STEX//",":TRAN//",":TRAX//",":VATA//",":WITH//",":COAX//",":ACCA//" }; 

,并创建一个函数来循环,并添加:

double sumTags(SwiftMessage inboundSwiftmessage, String inboundTagNumber, String [] inboundTagArray){ 
    double getTotal; 
    for(tagArrayData : inboundTagArray){ 
    String getData = stripData(inboundSwiftmessage.getTagData(inboundTagNumber,tagArrayData)); 
    getTotal = getTotal + Double.parseDouble(getData); 
    } 
    return getTotal; 
} 

这是除去前3个字符和转换功能,然后删除,逗号分成一段时间:

String stripData(String inboundString){ 
    if (inboundString==null){ 
    return "0"; 
    } 
    else 
    { 
    char strippedString; 
    StringBuffer strippedBuffer = new StringBuffer(""); 
    char [] inboundArray = inboundString.toCharArray(); 
    for (int counter = 3 ; counter < inboundArray.length; counter++) 
    { 
     strippedString = inboundArray[counter]; 
     strippedBuffer.append(strippedString); 
    } 
    return strippedBuffer.toString().replace(",","."); 
    } 
} 
1

对不起,我还是新手上的BeanShell和Java,但它可以工作吗? (这就像一个解决办法...)

String [] tagArray = new String [] 
{ "ACRU", "ANTO", "CHAR", "COUN", "EXEC", 
    "ISDI", "LADT", "LEVY", "LOCL", "LOCO", 
    "MARG", "OTHR", "POST", "REGF", "SHIP", 
    "SPCN", "STAM", "STEX", "TRAN", "TRAX", 
    "VATA", "WITH", "COAX", "ACCA" }; 

for (i: tagArray) { 
    // it was a test: print(i); 
    eval("String get" + i + " = swiftMessage.getTagData(\"19A\", \":" + i + "//\")"); 
} 

(对不起我的英文不好太...)

+0

我猜它可以工作,但你的循环似乎覆盖“我”在每一个循环。每次迭代后,您都需要一个占位符来保留总和。 – Carlos 2014-01-30 14:37:21

相关问题