我正在尝试从ArrayList
第一个整数值中检索数据并求和。
我尝试了多种方法来做到这一点,但无法获得预期的结果。我知道我的逻辑有一些错误。但我无法得到预期的结果。请帮我弄清楚。
int sum = 0;
List<String> sum_list = new ArrayList<>();
List<String> list21 = new ArrayList<>();
list21.add("1 tbsp olive oil plus a drizzle to serve (optional)");
list21.add("1 tbsp olive oil plus a drizzle to serve (optional)");
list21.add("2 tbsp pesto");
list21.add("2 tbsp pesto");
list21.add("2 tbsp pesto");
list21.add("2 tbsp pesto");
int i = 0;
while (i < list21.size()) {
String str1 = list21.get(i).trim().replaceAll("[0-9]", "");
String str2 = list21.get(i + 1).trim().replaceAll("[0-9]", "");
if (str1.equals(str2)) {
sum += Integer.valueOf(list21.get(i).replaceFirst(".*?(\\d+).*", "$1"))
+ Integer.valueOf(list21.get(i).replaceFirst(".*?(\\d+).*", "$1"));
// System.out.println("Sum=" + sum);
try {
if (!sum_list.isEmpty() && !sum_list.get(sum_list.size() - 1).trim().replaceAll("[0-9]", "").contains(str2)) {
sum_list.add(sum + " " + str1);
sum = 0;
} else sum_list.add(sum + " " + str1);
} catch (Exception e) {
}
}
i = i + 2;
}
System.out.println(sum_list.toString());
预期结果
2 汤匙橄榄油加细雨(可选),10 汤匙香蒜酱
代码输出
2汤匙橄榄油加细雨(可选),6汤匙香蒜酱,4汤匙香蒜酱
我已经理解您的逻辑并对代码进行了一些更改。这是您可以替换的代码块,while 循环。
for(String ops : list21){
if(sum_list.size()==0){
sum_list.add(ops);
}
else{
String str= ops.trim().replaceAll("[0-9]", "");
String str_from_list=sum_list.get(sum_list.size()-1).replaceAll("[0-9]", "").trim();
if(str_from_list.contains(str.trim())){
System.out.println("found");
int val= Integer.valueOf(sum_list.get(sum_list.size()-1).replaceFirst(".*?(\\d+).*", "$1"));
int to_add = Integer.valueOf(ops.replaceFirst(".*?(\\d+).*", "$1"));
int total = val+to_add;
sum_list.set(sum_list.size()-1,total+" "+str_from_list);
}
else{
sum_list.add(ops);
}
}
System.out.println(sum_list);
}
注意事项
[编辑]
要检查它是否在列表中没有顺序的情况下存在,请使用下面的代码块。
for(String ops : list21){
if(sum_list.size()==0){
sum_list.add(ops);
}
else{
String str= ops.trim().replaceAll("[0-9]", "");
int index=-1;
String str_from_list=null;
for(String str_from_l : sum_list){
str_from_list=str_from_l.replaceAll("[0-9]", "").trim();
if(str_from_list.contains(str.trim())){
index=sum_list.indexOf(str_from_l);
break;
}
}
if(index!=-1){
// System.out.println("found");
int val= Integer.valueOf(sum_list.get(index).replaceFirst(".*?(\\d+).*", "$1"));
int to_add = Integer.valueOf(ops.replaceFirst(".*?(\\d+).*", "$1"));
int total = val+to_add;
sum_list.set(index,total+" "+str_from_list);
}
else{
sum_list.add(ops);
}
}
}
System.out.println(sum_list);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句