在2D数组中找到一个字符串,然后转到相应的列

问题描述 投票:0回答:2

所以我正在将CSV转换为数组。 CSV的第一列由标题组成,描述该列中的内容。就我而言:产品ID |产品名称产品成本数量

我正在尝试遍历数组,找到字符串item1,然后转到该项目的数量,该数量在同一行中,但在不同的列中。

例如:

产品ID |产品名称产品成本数量

----- 001 ----- | ----- item1 ----- | ----- 5.99 ----- | ----- 3 -----

----- 002 ----- | ----- item2 ----- | ----- 2.99 ----- | ----- 5 -----

所以我想去这个数组,在行索引1中找到字符串item1,然后转到列索引3以将数量提取到变量中。然后,我想存储到变量中以最终打印出there are only 3 item1's left或类似的内容。

这是我到目前为止所得到的:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class test2 {

    public static List<List<String>> csvToArray() {
        String fileName = "c:\\temp\\test.csv";
        File file = new File(fileName);

        // this gives you a 2-dimensional array of strings
        List<List<String>> lines = new ArrayList<>();
        Scanner inputStream;

        try {
            inputStream = new Scanner(file);

            while (inputStream.hasNext()) {
                String line = inputStream.next();
                String[] values = line.split(",");
                // this adds the currently parsed line to the 2-dimensional string array
                lines.add(Arrays.asList(values));
            }

            inputStream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        return lines;
    }

    public static void printArray(List<List<String>> lines){
        int lineNo = 1;
        for (List<String> line : lines) {
            int columnNo = 1;
            for (String value : line) {
                System.out.println("Line " + lineNo + " Column " + columnNo + ": " + value);
                columnNo++;
            }
            lineNo++;
        }
    }

    public static void main(String[] args) {
        csvToArray();
        printArray(csvToArray());
    }
}

如您所见,在方法printArray中,我只是打印出数组以获取我所在位置的引用,但是一旦我尝试添加if,则Im会迷路。

任何帮助都会很棒:)

java arrays multidimensional-array
2个回答
0
投票

最佳解决方案是将每行映射到一个“产品”对象。该新闻类将包含诸如productID,productName,productCost和数量之类的属性。

每行映射到一个产品对象后,您只需找到具有所需productName的产品,然后就可以轻松访问其其他属性。


0
投票

如果使用List<String[]>而不是List<List<String>>,会更好。但是对于您的问题,您可以执行以下操作:

for (int i = 0; i < lines.size(); i++)
    System.out.println("There are only " + lines.get(i).get(3).replace("-", "") + " " + lines.get(i).get(1).replace("-", "") + "'s left");
© www.soinside.com 2019 - 2024. All rights reserved.