代码之家  ›  专栏  ›  技术社区  ›  Ken Sinelli

Java使用.split将字符串数组拆分为更小的数组会创建重复的数组名称吗?

  •  0
  • Ken Sinelli  · 技术社区  · 4 年前

    请参考我创建的以下图片,我认为这将有助于澄清我的问题。颜色编码是为了帮助识别每个数组中的元素。

    https://ibb.co/cbvscXc

    我只是在学习Java,并试图理解练习的解决方案。我有一个。Java程序读取的CSV文件,我有两个数组。一个数组有标头,另一个数组最初将值存储为字符串(稍后转换为Doubles,因为问题中的实际数字是Doubles)。

    然而,当运行拆分“行”数组的代码时,这不是会创建多个具有重复名称的数组吗,如图所示?

    这段代码似乎用简单的英语说:“对于“lines”数组中的每个String元素,只要有逗号,就拆分字符串,并将每个新字符串作为一个元素存储在一个名为“values”的String数组中。”

    或者它只创建了一个名为“values”的新数组,其中有20个单独的元素?如果是这样的话,那么我不明白每个循环第二个循环中的计数器(“cnt”)是如何知道如何在第五个标头之后循环回到第一个标头的。

    因此,假设第一个猜测是正确的,这不会导致每个数组中具有不同值的重复数组名称的问题吗?每个循环的第二个如何知道我想迭代哪个“值”数组?它如何知道迭代所有“值”数组?

    还是发生了我不理解的其他事情?我正在学习的视频并没有真正解释清楚:/

    编辑以添加每个请求的代码块

    我们从两个数组开始,行数组和头数组:

    lines Array ["1,2,3,4,5","6,7,8,9,10","11,12,13,14,15","16,17,18,19,20"]
    
    headers Array ["Open","High","Low","Close","Volume"]
    

    然后在lines数组上运行:

    for(String line : lines) {
    String[] values = line.split();}
    

    如果我理解正确的话,应该会创建四个新的 永久的 数组,基本上将一个由四个元素组成的大数组分割成四个新的数组,每个数组有5个元素,如下所示:

    values Array ["1","2","3","4","5"]
    values Array ["6","7","8","9","10"]
    values Array ["11","12","13","14","15"]
    values Array ["16",17","18","19","20"]
    

    正如一条评论所建议的那样,我认为这些数组是永久的,在循环的每次迭代后不会被“遗忘”,因为每个数组在第二个循环中都会被进一步迭代,我们在每个循环中为每个值添加一个头部,有效地创建了一个HashMaps列表,每个数组都有一个头部对应该特定数组中的每个值。这要等到第一个for每个循环运行完毕后才会发生,所以如果数组被遗忘了,它怎么能回去添加头呢?

    代码块中每个循环的第二个循环:

    int cnt = 0;
    HashMap<String, Double> headerValueMap = new HashMap<>();
    for (String value : values) {
        double dval = Double.parseDouble(value);
        headerValueMap.put(headers.get(cnt), dval);
        cnt++;
    }
    

    这将创建新的HashMap:

    headerValueMap [{Open=1, High=2, Low=3, Close=4, Volume=5}, {Open=6, High=7, Low=8, Close=9, Volume=10}, etc...]
    

    编辑:我一直在寻找,但仍然无法找到这个问题的答案。

    0 回复  |  直到 4 年前
        1
  •  0
  •   Bohemian    4 年前

    你没有对分裂的结果做任何事情;你需要把它保存在某个地方。

    试试这样的:

    List<String[]> table = new ArrayList<>();
    for (String line : lines) {
         String[] values = line.split();
         table.add(values);
    }
    

    或者更好的是,创建一个 List<List<String>> .