首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较数组与文本文件

比较数组与文本文件
EN

Stack Overflow用户
提问于 2018-12-05 02:24:03
回答 1查看 133关注 0票数 0

我有一个文本文件:"example.csv“,它包含1000行。

文本文件包含

代码语言:javascript
复制
Dog, 3123
Cat, 6544
Chicken, 8943

另一个:包含1000行的"example2.csv“。

代码语言:javascript
复制
Fruit, 3243
Banana, 9432
Chicken, 2043

以及包含(100行)的数组:

代码语言:javascript
复制
Home, Dan, Dog, 4234
Home, Bug, Chicken, 3213
Home, Hds, Banana, 4324
Out, Bgh, Poodle, 3129

我需要将数组中的第三列更改为CSV,example.csv中的值。如果在第一个示例中找不到,则需要查看第二个示例2.csv。

正如您在我的示例中所看到的,小鸡在这两种情况下都出现了,但是它需要从example.csv中找到值。然而,果树只出现在第二个,所以它需要从example2.csv中找到值。

在这两个csv中没有找到的任何东西都需要显示它不存在。

任何例子都是:

代码语言:javascript
复制
Home, Dan, Dog, 4234
Home, Bug, Chicken, 3213
Out, Bgh, Poodle, 3129

化作

代码语言:javascript
复制
Home, Dan, 3123, 4234
Home, Bug, 8943, 3213
Home, Hds, 9432, 4324
Out, Bgh, Poodle, 3129 : Display :Missing - Poodle

谢谢!

Number是数组,isFound从false拆分开始:",“

以下是我的尝试:

代码语言:javascript
复制
try {
    //Scanner inFile = new Scanner (new FileReader("Files\\"+"ABTutor2018Sem2"+".csv")); // import file
    brStudents = new BufferedReader(new FileReader("Files\\deploystudio.csv"));
    brStudents2 = new BufferedReader(new FileReader("Files\\deploystudio2.csv"));
    while ((line = brStudents.readLine()) != null) {
        arrSubjectsDeploy = line.split(splitBy);                      
        isFound = false;
        for(int h = 0; h < l; h++) {
            arrSubjects = Number[h].split(splitBy);
            line2 = "";
            errorMessage = arrSubjectsDeploy[0]; 
            if(arrSubjects[2].equals(arrSubjectsDeploy[0])) {
                arrSubjects[2] = arrSubjectsDeploy[1];  
                m++;
                tempHolder = "";
                isFound = true;
            }
            if(h == l-1 && isFound == false) {
                System.out.println("Missing: " + errorMessage);
            } 
        }
    }
}

这只是尝试做第一个文本文件..。但是仍然不能工作,因为它正在查看文本文件的内容,并查看它是否与数组相比较,而不是相反。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-05 09:22:58

您可以使用Map<String,String>存储example.csvexample2.csv的内容。然后对输入数组进行迭代,以检查它是否存在于任何一个文件中。

代码语言:javascript
复制
Map<String, String> firstFile = readFileAndConvert("Files\\deploystudio.csv");
Map<String, String> secondFile = readFileAndConvert("Files\\deploystudio2.csv");
int index = 2;
String[][] finalArray =
    {{"Home", "Dan", "Dog", "4234"}, {"Home", "Bug", "Chicken", "3213"},
        {"Home", " Hds", "Banana", "4324"}, {"Out", " Bgh", "Poodle", "3129"}};
for(String[] row : finalArray) {
  String valueToFind = row[index];
  if(firstFile.containsKey(valueToFind)) {
    row[index] = firstFile.get(valueToFind);
  } else if(secondFile.containsKey(valueToFind)) {
    row[index] = secondFile.get(valueToFind);
  } else {
    System.out.println("Missing " + valueToFind);
  }
}

readFileAndConvert函数使用java 8,但您也可以与任何其他版本实现类似的功能。

代码语言:javascript
复制
private Map<String, String> readFileAndConvert(String path) throws IOException {
    String SEPARATOR = ",";
    try (Stream<String> lines = Files.lines(Paths.get(path))) {
      return lines.map(line -> line.split(SEPARATOR))
      .collect(Collectors.toMap(array -> array[0], array -> array[1]));
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53624259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档