对于每个循环都不会将ArrayList String添加到ArrayList <arraylist <string>&gt;

时间:2015-06-05 16:34:20

标签: java android android-activity arraylist foreach

我已经创建了一个For Each循环,在其中完成了工作,然后添加到String ArrayList var_CaramelChoc,每次迭代都要添加到ArrayList<ArrayList<String>> numStuff

但是当功能完成时。这些结果不会显示为添加到ArrayList<ArrayList<String>> numStuff(而是显示为空)。

如何修复我的代码,以便在forEach循环中String ArrayList var_CaramelChoc内完成的工作添加到ArrayList<ArrayList<String>> numStuff

要明确ArrayLists添加的numStuff没有值。问题是ArrayList<ArrayList<String>> numStuff本身,完成为空(当前没有添加ArrayLists)。

以下代码:

 private ArrayList<ArrayList<String>> hasStuff(String line) {
        ArrayList<ArrayList<String>> numStuff = new ArrayList<>();
    for (String caramelChoc : CaramelChoc) {
        ArrayList<String> var_CaramelChoc = new ArrayList<>();
        if ((line.contains(caramelChoc.toLowerCase() + " ") || line.contains(caramelChoc + " ")) && line.contains(";")) {
            String mainString = line.toLowerCase();

            if (!(mainString.contains(","))) {
                var_CaramelChoc.add((line).replace(";", ""));
            } else {
                    ...
            }
        }
        numStuff.add(new ArrayList<>(var_CaramelChoc));
        }
  return numStuff;
    }

我期待发生什么,除非我弄错了。在每次迭代中,即使不满足下面的条件,也会将arrayList添加到ArrayList<ArrayList<String>> numStuff (在任何一种情况下,虽然添加的arrayList可能为空。一个空的arrayList,仍然会存在于numStuff中)。但目前情况并非如此。

if ((line.contains(caramelChoc.toLowerCase() + " ") || line.contains(caramelChoc + " ")) && line.contains(";")) {

3 个答案:

答案 0 :(得分:0)

嗯,这看起来并不像java风格。 首先,for (String caramelChoc : **CaramelChoc**)不应该用大写声明,它应该是caramelChoc

变量命名约定是简单的camelCase。因此,var_CaramelChoc应该替换为caramelChocks

根据您的代码,您不需要ArrayList<ArrayList<String>>。您的var_CaramelChoc将始终只包含一个值,因为未定义用于添加多个值的循环。因此,它可以简化为ArrayList<String>,并且看起来像numStuff.add(line.replaceAll(";","");

执行ArrayList的简化后,您的代码将变得更具可读性。我还建议添加logging,如果CaramelChoc

,则会记录当前输入参数和当前大小

答案 1 :(得分:0)

你在numStuff中得到空[[],[]],因为你在循环中创建ArrayList<String> var_CaramelChoc = new ArrayList<>();并且最后添加了空列表。仅当您要添加任何元素时才初始化列表,或仅在列表不为空时添加。

缺陷在于你的if ((line.contains(caramelChoc.toLowerCase() + " ") || line.contains(caramelChoc + " ")) && line.contains(";"))陈述。检查eclipse调试器失败/通过条件的位置。

任何测试用例?

答案 2 :(得分:0)

尝试以下方法以更好地调试并查看会发生什么

private ArrayList<ArrayList<String>> hasStuff(String line) {

    ArrayList<ArrayList<String>> numStuff = new ArrayList<>();

    for (String caramelChoc : CaramelChoc) {
        ArrayList<String> var_CaramelChoc = new ArrayList<>();

        if ((line.contains(caramelChoc.toLowerCase() + " ") || line.contains(caramelChoc + " ")) && line.contains(";")) {
            String mainString = line.toLowerCase();

            var_CaramelChoc.add("FIRST IF") ;

            if (!(mainString.contains(","))) {
                var_CaramelChoc.add((line).replace(";", ""));
            } else {
                    ...
            }
        }
        else
        {
            var_CaramelChoc.add("FIRST ELSE") ;
        }
        numStuff.add(new ArrayList<>(var_CaramelChoc));
     }
     return numStuff;
 }