【问题标题】:Java does using .split to split an array of Strings into smaller arrays create duplicate array names?Java 使用 .split 将字符串数组拆分为较小的数组会创建重复的数组名称吗?
【发布时间】:2020-11-09 07:25:22
【问题描述】:

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

https://ibb.co/cbvscXc

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

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

代码似乎用简单的英语说,“对于“lines”数组中的每个字符串元素,将字符串拆分到任何有逗号的地方,并将每个新字符串作为一个元素存储在名为“values”的字符串数组中“。”

还是只创建一个名为“values”的新数组,其中包含 20 个单独的元素?如果是这种情况,那么我不明白第二个 for-each 循环中的计数器(“cnt”)如何知道如何在第 5 个标头之后循环回到第一个标头。

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

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

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

我们从两个数组开始,lines数组和headers数组:

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"]

我理解这些是永久性的,而不是像一条评论所建议的那样在每次循环迭代后“被遗忘”的原因是,这些数组中的每一个都在第二个 for-each 循环中进一步迭代,我们在其中添加了一个标题每个值,有效地创建一个 HashMap 列表,每个数组都有一个针对该特定数组中每个值的标题。直到第一个 for-each 循环完成运行后才会发生这种情况,那么如果忘记了数组,它怎么能返回并添加标题呢?

代码块中的第二个for-each循环:

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...]

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

【问题讨论】:

  • 请不要添加图片,而是添加代码以获得更好的帮助
  • 第一次通过 for 循环,values 持有对第一个五个字符串数组的引用。第二次通过循环,values 持有对第二个五个字符串数组的引用,依此类推。每次,前一个数组都被“遗忘”。
  • edit您的问题在此处将代码显示为文本以与图像一起显示。
  • 更新添加代码块并添加一些更清晰的思维过程
  • 请在这方面寻求帮助..

标签: java arrays split


【解决方案1】:

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

试试这样的:

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

或者更好的是,创建一个List&lt;List&lt;String&gt;&gt;

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    相关资源
    最近更新 更多