我想将数据添加到数据集以在图表上显示某些值。在某些文件中,第一行是列的描述(如“Timestamp”或其他内容)。我需要我的代码来测试第一行是否包含整数或浮点值,如果不是要跳过这一行并将数据添加到第二行的数据集中。
这是我的代码:
for (int i = 0; i < listOfLists.size(); i++) {
for (int j = 1; j < listOfLists.get(i).size(); j++) {
if (listOfLists.get(i).get(0).matches("\\d+(?:\\,\\d+)?") || listOfLists.get(i).get(0).matches("\\d+(?:\\.\\d+)?")) {
datasetBar.addValue(Float.parseFloat(listOfLists.get(i).get(j).replace(",",".")),columnsLabel[i].getText(), ""+listOfLists.get(0).get(j));
} else if(listOfLists.get(i).get(1).matches("\\d+(?:\\,\\d+)?") || listOfLists.get(i).get(1).matches("\\d+(?:\\.\\d+)?")){
datasetBar.addValue(Float.parseFloat(listOfLists.get(i).get(j).replace(",",".")),columnsLabel[i].getText(), ""+listOfLists.get(0).get(j));
问题是当他试图在条形图的图上表示字符串时出现错误
列表列表是列的列表。文件的每一列都会添加到列表中,每个列都会添加到 listOfLists 中。
我尝试使用 else if 块:listOfLists.get(i).remove(0)
但它没有用。 (在接下来的循环中,它保留了删除剩余列表的第一行。
提前致谢!
答案 0 :(得分:1)
你可以在内循环之前检查外循环:
if (i == 0 && listOfLists.get(i).get(0).matches(/\\d+(?:[\\.,]\\d+)?)/) == false) {
continue; // skip first line
}
BTW:你不应该在迭代列表时调用remove方法,因为你会得到ConcurrentModificationException。
答案 1 :(得分:1)
可能是这样的:
for (int i = 0; i < listOfLists.size(); i++) {
for (int j = 0; j < listOfLists.get(i).size(); j++) {
if (j==0){ // Only test if it is a string in position [0]
boolean isNumber = listOfLists.get(i).get(0).matches("\\d+(?:\\,\\d+)?") || listOfLists.get(i).get(0).matches("\\d+(?:\\.\\d+)?");
if (!isNumber) continue; // If it is not a number, skip it
}
// Add to database, because it is a number
datasetBar.addValue(Float.parseFloat(listOfLists.get(i).get(j).replace(",",".")),columnsLabel[i].getText(), ""+listOfLists.get(0).get(j));
答案 2 :(得分:0)
希望它可以帮助任何人理解。
for(int i = 0; i < n; i++){ /* i = 0 means position of i is 0 which is 1st line */
if(i != 0 ){ /* and as our purpose is skipping first line so I will only continue when i is not equal 0 like this we can skip first line in this if block */
continue;
}
}