我想基于行启动器将行拆分为列表,尝试时会出现异常。

档案内容:

H1|!!!!!!!!!!!!!!!!!
L1|DDDDDDDDDDDDD
L2|DDDDDDDDDDDDD
H2|!!!!!!!!!!!!!!!!!
L1|DDDDDDDDDDDDD
L2|DDDDDDDDDDDDD
L3|DDDDDDDDDDDDD
EOF


输出:

   Postring size :8
SSSSS:H1|!!!!!!!!!!!!!!!!!
0head:H1|!!!!!!!!!!!!!!!!!
1detail:L1|DDDDDDDDDDDDD
2detail:L2|DDDDDDDDDDDDD
3detail:H2|!!!!!!!!!!!!!!!!!
SSSSS:H2|!!!!!!!!!!!!!!!!!
3head:H2|!!!!!!!!!!!!!!!!!
4detail:L1|DDDDDDDDDDDDD
5detail:L2|DDDDDDDDDDDDD
6detail:L3|DDDDDDDDDDDDD
7detail:EOF
SSSSS:L1|DDDDDDDDDDDDD
SSSSS:L2|DDDDDDDDDDDDD
SSSSS:L3|DDDDDDDDDDDDD
SSSSS:EOF
hshshshshs:::::::


[[H2 | !!!!!!!!!!!!!!!!!,L1 | DDDDDDDDDDDDDDD,L2 | DDDDDDDDDDDDDDD,L3 | DDDDDDDDDDDDDDD,EOF]]

listOrder-是字符串行的列表

 List<Order> listOrder = new ArrayList<Order>();
           Set<List<String>> hs = new HashSet<List<String>>();
           if(poString !=null && poString.size() > 0)
            {

               headerstart:
               for(int i=0;i<poString.size();i++)
               {
                   String s = poString.get(i);
                   if(s.startsWith("H"))
                   {
                       List<String> tempS = new ArrayList<String>();
                       tempS.add(s);
                       System.out.println("head:"+s);
                       for(int j=i+1;i<poString.size();j++)
                       {
                           String t = poString.get(j);
                           System.out.println("detail:"+t);
                           if(t.startsWith("H"))
                           {
                               i = j-1;
                                               hs.add(tempS);
                               continue  headerstart;
                            }
                           else
                           {
                            tempS.add(t);
                           }
                       }
                       hs.add(tempS);
                   }
               }

最佳答案

在您的外循环中:-

for(int i=0;i<poString.size();i++)


i的值达到poString.size() - 1时,在内部循环中:-

for(int j=i+1;i<poString.size();j++)


j的值用poString.size()初始化。现在,由于您的条件是i < poString.size()(对于i = poString.size() - 1仍然适用),因此您可以在循环内移动并在以下位置访问索引j:-

String t = poString.get(j);


这是IndexOutOfBounds。实际上,您只会在外循环的第一次迭代中遇到此问题。由于您的内部循环永远不会中断,这是由于条件上的逻辑错误所致。

因此,基本上,您需要将内部循环更改为:-

for(int j=i+1; j < poString.size();j++)


请注意,我只在条件部分将i更改为j

10-04 17:50