2012-01-31 53 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

相關問題