2016-01-14 35 views
0

處理以下代碼以修改HL7消息並根據我寫的條件添加一些十六進制字符。Arraylist子列表IndexOutOfBounds異常

從文本框中複製字符串並將其轉換爲Arraylist,以便我可以遍歷它以查找HL7段的名稱。爲此,我從Arraylist中獲得一個子列表。但是當處理下面的代碼時,我得到了IndexOutOf Bounds異常。我知道,當搜索Sublist時,我的搜索超過了Arraylist的大小。只需要一個提示來檢查Sublist的值是否超出Arraylist大小。

下面是相同的代碼:

public String validateMsg(String msg) { 
    msg = msg.replaceAll("[^a-zA-Z0-9] && ^[|&^~#.$]", null); 

    msg = msg.replaceAll("\\s", ""); 
    msg = msg.replaceAll("\u000b", ""); 

    String strArray[] = msg.split(""); 

    ArrayList<String> msgArray = new ArrayList<String>(
      Arrays.asList(strArray)); 

    msgArray.add(0, "\u000b"); 

    for (int i = 0; i + 3 < msgArray.size(); i++) { 

     String tmpSeg = ""; 

     StringBuilder sb = new StringBuilder(); 

     for (String tmpSeg1 : msgArray.subList(i, i + 3)) { 
      sb.append(tmpSeg1).append(""); 
     } 

     tmpSeg = sb.toString(); 

     if (tmpSeg.equals("EVN") && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("MRG") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("PID") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("PD1") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("PV2") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("OBR") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("ORC") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("OBX") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("SPM") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("ZFM") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("GT1") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("ZEP") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("ZVT") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("AL1") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("FT1") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("IN1") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("IN2") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("IN3") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("NK1") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("ACC") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("PR1") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("UB1") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("UB2") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("PD1") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("RXO") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("RXE") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("RXR") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("RXC") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("RXO") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("ROL") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("DB1") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("DRG") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("PDA") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("NTE") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("ODS") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("ODT") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("SCH") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("ZDS") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("ZIN") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("ZAL") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("NPU") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("ZAB") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("ZAU") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("ZEP") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("ZEV") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("ZRC") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("ZAT") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("ZIV") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("TXA") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("MFI") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("MFE") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("STF") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("PRA") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("PID") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("AIS") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("AIG") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("AIL") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("AIP") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("RRA") 
       && !msgArray.get(i - 1).contains("\r") 
       || tmpSeg.equals("PV1") 
       && !msgArray.get(i - 1).contains("\r")) { 
      msgArray.add(i, "\r"); 
      // break; 
     } 

    } 

    msgArray.add(msgArray.size(), "\r"); 
    msgArray.add(msgArray.size(), "\u001C\r"); 

    StringBuilder strBuilder = new StringBuilder(); 
    for (String str : msgArray) { 
     strBuilder.append(str).append(""); 
    } 

    return strBuilder.toString(); 
} 

請幫我一些提示,使我的病情將檢查如果我沒有渡ArrayList的大小。

在此先感謝。

回答

0

試試下面的代碼,

if((i+3)<= msgArray.size()){ 
    for(String tmpSeg1:msgArray.subList(i, i+3)) 
     { 
      sb.append(tmpSeg1).append(""); 
     } 
    }else{ 

    System.out.println("Exceeds size"); 
    } 
+0

由於一噸!它的工作,你節省了我的時間。 –