如何在Java中拆分String并将其存储在不同的列表中

时间:2018-05-10 07:14:09

标签: java string arraylist

我已将这些逗号分隔的String存储在ArrayList中。

[<b>SELL 512<\/b> lots of <b>xyz18@112.00<\/b>, <b>BUY 513<\/b> lots of <b>abc@113.00<\/b>]

我想删除所有HTML标签,然后我想将它们存储在不同的数组列表中。

比如说我希望我的输出像这样。

 List3: [SELL, BUY]
 List4: [512, 513]
 List5: [xyz, abc]
 List6: [112, 113]
List<String> List1 = new ArrayList<>();
List<String> List2 = new ArrayList<>();
List<List<String>> Tuples = new ArrayList<List<String>>();
List<String> List3 = new ArrayList<>();
List<String> List4 = new ArrayList<>();
List<String> List5 = new ArrayList<>();
List<String> List6 = new ArrayList<>();

 for (int i = 0; i < List1.size(); i++) {
       String var = List1.get(i).trim();
       for (String x : var.split("\\<.*?\\>|\\@|\\,*$|\\.", 7)) {
           List2.add(x);
       }
       Tuples.add(List2);
   }
   System.out.println(Tuples);

   for (int i = 0; i < Tuples.size(); i++) {
       List3.add(Tuples.get(i).get(1).split("\\s")[0].replaceAll("SELL","0").replaceAll("BUY","0"));
       List4.add(Tuples.get(i).get(1).split("\\s")[1]);
       List5.add(Tuples.get(i).get(3));
       List6.add(Tuples.get(i).get(4));
   }
   System.out.println(List3);
   System.out.println(List4);
   System.out.println(List5);
   System.out.println(List6);

}

但这会让我输出类似这样的内容:

 List3: [SELL, SELL]
 List4: [512, 512]
 List5: [xyz, xyz]
 List6: [112, 112]

1 个答案:

答案 0 :(得分:2)

如果您检查System.out.println(Tuples);的输出,则会发现问题:

Tuples.add(List2) 制作List2的副本。您在List2中存储了对同一Tuples的多个引用,并将更多数据附加到同一List2。因此,您最终得到一个包含所有连接元组的非常长的列表(即List2),该列表在Tuples内复制多次。

而不是

Tuples.add(List2);

试试这个:

Tuples.add(new ArrayList<>(List2));
List2.clear();

这会使Tuples的元素引用不同的列表。