我已经创建了一个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(";")) {
答案 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;
}