当前位置: 首页 > 知识库问答 >
问题:

解析复合csv的方法表现得很奇怪

施晗昱
2023-03-14

这个问题与我之前发布的一个问题有关:

在java中解析拆分的csv文件

它与我试图编写的一个方法有关,该方法能够将csv文件拆分为几个不同的数组列表,其中每个列表的数据由一个注释分隔,该注释由“%”表示

这是我写的代码:

ArrayList<ArrayList<int[]>> parseValues(Scanner input, int size)
{
    ArrayList<ArrayList<int[]>> output = new ArrayList<ArrayList<int[]>>();
    boolean state = false;
    boolean lastState = false;
    int count = 0;
    int i = -1;

    System.out.println();

    while (input.hasNextLine())
    {
        String temp = input.nextLine();

        if (temp.startsWith("%"))
            state = false;
        else
            state = true;

        if (state != lastState)
        {
            count++;
        }

        if (count % 2 == 0)
        {
            output.add(new ArrayList<int[]>());
            System.out.println("====new list====");
            i++;
        }

        lastState = state;

        if (!temp.startsWith("%"))
        {
            int j = 0;
            int[] values = new int[size];

            for (String value: temp.split(","))
            {
                try
                {
                    values[j] = Integer.parseInt(value);
                }
                catch (NumberFormatException e)
                {
                    values[j] = 0;
                }

                j++;
            }

            output.get(i).add(values);
        }
        System.out.println("count = " + count + "  count%2 = " + 
                (count%2) + "  state = " + state + "  lastState = " + 
                lastState +"  output.size() = " + output.size() + 
                "  output[i].size() = " + output.get(i).size());
    }

    return output;
}

(println语句都只是为了调试)

当我将以下文件输入算法时:

% into ArrayList<Integer> list1
3,4,5,2,2,3
5,6,3,2,4,5
3,2,3,4,5,6
2,3,4,5,1,3
4,3,5,4,3,2
4,4,3,4,5,4
% 
% the values below here should go
% into ArrayList<Integer> list2
4,6,3,4,5,3
3,4,5,6,3,2
4,5,6,4,3,2
3,4,3,2,4,5
4,5,3,2,5,3
4,3,4,5,3,2
4,4,3,2,4,5
7,5,4,5,6,7
6,4,3,5,6,4

我得到以下输出:

====new list====
count = 0  count%2 = 0  state = false  lastState = false  output.size() = 1  output[i].size() = 0
count = 1  count%2 = 1  state = true  lastState = true  output.size() = 1  output[i].size() = 1
count = 1  count%2 = 1  state = true  lastState = true  output.size() = 1  output[i].size() = 2
count = 1  count%2 = 1  state = true  lastState = true  output.size() = 1  output[i].size() = 3
count = 1  count%2 = 1  state = true  lastState = true  output.size() = 1  output[i].size() = 4
count = 1  count%2 = 1  state = true  lastState = true  output.size() = 1  output[i].size() = 5
count = 1  count%2 = 1  state = true  lastState = true  output.size() = 1  output[i].size() = 6
====new list====
count = 2  count%2 = 0  state = false  lastState = false  output.size() = 2  output[i].size() = 0
====new list====
count = 2  count%2 = 0  state = false  lastState = false  output.size() = 3  output[i].size() = 0
====new list====
count = 2  count%2 = 0  state = false  lastState = false  output.size() = 4  output[i].size() = 0
count = 3  count%2 = 1  state = true  lastState = true  output.size() = 4  output[i].size() = 1
count = 3  count%2 = 1  state = true  lastState = true  output.size() = 4  output[i].size() = 2
count = 3  count%2 = 1  state = true  lastState = true  output.size() = 4  output[i].size() = 3
count = 3  count%2 = 1  state = true  lastState = true  output.size() = 4  output[i].size() = 4
count = 3  count%2 = 1  state = true  lastState = true  output.size() = 4  output[i].size() = 5
count = 3  count%2 = 1  state = true  lastState = true  output.size() = 4  output[i].size() = 6
count = 3  count%2 = 1  state = true  lastState = true  output.size() = 4  output[i].size() = 7
count = 3  count%2 = 1  state = true  lastState = true  output.size() = 4  output[i].size() = 8
count = 3  count%2 = 1  state = true  lastState = true  output.size() = 4  output[i].size() = 9

这几乎是我想要的,除了它是为每一个状态变化创建额外的列表,而不是每一个第二个状态变化,这就是我想要的。。

我已经和它混在一起很久了,我似乎不能让它做我想让它做的事情。我确定这是非常简单的事情,但我一生都无法解决它。还有其他人知道它为什么要这样做吗?任何帮助将不胜感激。谢谢!

共有1个答案

阎辰钊
2023-03-14

经过多次试验和反复推敲,我终于找到了答案..如果有人对类似的问题感兴趣或者被它困住,这里的这段代码:

if (count % 2 == 0)
    {
        output.add(new ArrayList<int[]>());
        System.out.println("====new list====");
        i++;
    }

需要更改为:

if (count % 4 == 0)
    {
        output.add(new ArrayList<int[]>());
        System.out.println("====new list====");
        count++;
        i++;
    }

模4确保每2个状态改变就触发一次,而不是每次状态改变,计数确保计数% 4!= 0,因此创建另一个列表..

嘘!这很烦人,但很高兴解决了!

 类似资料:
  • 本文向大家介绍Mysql复制表三种实现方法及grant解析,包括了Mysql复制表三种实现方法及grant解析的使用技巧和注意事项,需要的朋友参考一下 如何快速的复制一张表 首先创建一张表db1.t,并且插入1000行数据,同时创建一个相同结构的表db2.t 假设,现在需要把db1.t里面的a>900的数据行导出来,插入到db2.t中 mysqldump方法 几个关键参数注释: –single-t

  • 本文向大家介绍Python实现合并excel表格的方法分析,包括了Python实现合并excel表格的方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现合并excel表格的方法。分享给大家供大家参考,具体如下: 需求 将一个文件夹中的excel表格合并成我们想要的形式,主要要pandas中的concat()函数 思路 用os库将所需要处理的表格放到同一个列表中,然后遍

  • 复选框问题 编辑文本问题 按钮问题 我已经多次遇到这个问题,通过快速搜索很容易找到许多类似的问题。有时列表视图行布局的动态更改也会影响其他行,有时不会。 作为这个问题的解决方案,我通常会跟踪列表中的全部项目,每次我有一个变化,我都会重置列表中的所有项目。 例如:如果我有一个包含文本视图和复选框的列表,我必须保留一个布尔数组,指示每个复选框的状态,在我的getView()覆盖中,我会根据该数组重置所

  • 本文向大家介绍Python实现简单HTML表格解析的方法,包括了Python实现简单HTML表格解析的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现简单HTML表格解析的方法。分享给大家供大家参考。具体分析如下: 这里依赖libxml2dom,确保首先安装!导入到你的脚步并调用parse_tables() 函数。 1. source = a string contai

  • 我收到了一个包含字符串和元组元素组合的CSV文件,但找不到正确解析它的方法。我错过了什么明显的东西吗? csvfile 第一行是标题,第二行开始数据 产量: csv.reader解析每行不同,因为结构复杂,嵌入了花括号元素。 ...但是我希望每行有20个元素。

  • 我试图使用opencsv 3.3与一些用户解析一个简单的csv文件并将其放入bean中,但在运行代码时得到一个类未找到异常。下面是我用于读取对象的Person.class文件。 读取 csv 的代码如下。 当我运行这个时,它表示没有找到报头映射的类。你知道这个人是否有问题吗。类还是使用映射?如果您能提供任何帮助,我们将不胜感激。