所以我正在将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会迷路。
任何帮助都会很棒:)
最佳解决方案是将每行映射到一个“产品”对象。该新闻类将包含诸如productID,productName,productCost和数量之类的属性。
每行映射到一个产品对象后,您只需找到具有所需productName的产品,然后就可以轻松访问其其他属性。
如果使用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");