我在ArrayList
上包含如下数据:13-ITEM,14-ITEM,15-ITEMGROUP
(带有连字符( - )作为分隔符。)
我想将此列表拆分为两个新的ArrayLists
:
[13,14,15..]
[ITEM,ITEM,ITEMGROUP...]
我是Java新手。提前谢谢。
答案 0 :(得分:2)
您可以使用String#indexOf(char)
在分隔符的String
中查找索引,然后使用String#substring
提取子字符串,如下所示:
List<String> list = Arrays.asList("13-ITEM","14-ITEM","15-ITEMGROUP");
List<String> list1 = new ArrayList<>(list.size());
List<String> list2 = new ArrayList<>(list.size());
for (String s : list) {
int index = s.indexOf('-');
// Add what we have before the separator in list1
list1.add(s.substring(0, index));
// Add what we have after the separator in list2
list2.add(s.substring(index + 1));
}
System.out.printf("List 1 = %s, List 2 = %s%n", list1, list2);
<强>输出:强>
List 1 = [13, 14, 15], List 2 = [ITEM, ITEM, ITEMGROUP]
答案 1 :(得分:0)
拆分每个条目并将零件添加到不同的列表中。如果文本包含更多-
s,则使用子字符串。
ArrayList<String> input = ...
List<String> output1 = new ArrayList<>(input.size());
List<String> output2 = new ArrayList<>(input.size());
for(String item:input){
String[] splitted = item.split("-");
output1.add(splitted[0]);
output2.add(splitted[1]);
}
答案 2 :(得分:0)
您可以使用以下代码
List<String> list = Arrays.asList("13-ITEM", "14-ITEM", "15-ITEMGROUP");
list.stream().map(p -> p.substring(0, p.indexOf('-'))).forEach(System.out::println);
list.stream().map(p -> p.substring(p.indexOf('-') + 1)).forEach(System.out::println);
如果您将这些问题分开(每个列表都是使用不同的逻辑创建的),您将有可能进一步封装代码。例如,您可以添加一些异常处理。
private static Function<String, String> getFunction() {
return new Function<String, String>() {
@Override
public String apply(String p) {
return p.substring(0, p.indexOf('-'));
}
};
}