首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一个数组元素与多个数组元素进行比较

将一个数组元素与多个数组元素进行比较
EN

Stack Overflow用户
提问于 2014-04-22 18:25:15
回答 1查看 75关注 0票数 0

我有两个文本文件的数据如下所示:文件A:

代码语言:javascript
复制
4,12-98-1,38.4611,APO,Tue,Jan,07,14:31:34,2014
5,12-111-1,0.9520,APO,Tue,Jan,07,11:56:21,2014,
6,12-176-1,8.0510,APO,Tue,Jan,07,11:58:10,2014,
7,12-214-1,165.2349,APO,Tue,Jan,07,14:33:19,2014
8,12-293-1,61.2558,APO,Tue,Jan,07,14:35:11,2014
9,12-805-1,2.0987,APO,Tue,Jan,07,12:03:30,2014,
10,12-986-1,3.7740,APO,Tue,Jan,07,12:05:16,2014,

档案B:

代码语言:javascript
复制
4,12-98-1,43.6546,APO,Tue,Jan,07,10:26:32,2014,
5,12-111-1,1.0430,APO,Tue,Jan,07,10:28:18,2014,
6,12-176-1,13.5606,APO,Tue,Jan,07,10:30:04,2014,
7,12-214-1,44.7091,APO,Tue,Jan,07,10:35:27,2014,
8,12-293-1,44.3001,APO,Tue,Jan,07,10:37:14,2014,
10,12-805-1,2.6451,APO,Tue,Jan,07,10:39:01,2014,

这些行中的每一行都存储在数组中。我想将文件A第一行的第一个数组元素与文件B中所有行的所有第一个数组元素进行比较,然后将文件A第二行的第一个数组元素与B文件中所有行的所有第一个数组元素进行比较,然后继续.直到文件结束。

在读取两个文本文件时,我设法得到了匹配的文件。但是,我不能让它匹配,例如,在每个文件上的最后一行,第一个数组元素在两个文件上都是10。

我怎么能这么做?

以下是我所做的:

代码语言:javascript
复制
 while ( (TKN24_line2 = TKN24br2.readLine()) != null && (TKN2_line2 = TKN2br2.readLine()) != null){
        TKN24_array2 = TKN24_line2.split(",");
        int b = 0;
        for(String s : TKN24_array2){
            //System.out.println("values[" + b + "] = " + s);
            b++;
        }

        TKN2_array2 = TKN2_line2.split(",");
        int c = 0;
        for(String s : TKN2_array2){
            //System.out.println("values[" + c + "] = " + s);
            c++;
        }

        if(TKN24_array2[0].contentEquals(TKN2_array2[0])){
            //Print something.
        }

    }

任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-22 18:51:20

如果所有数据都不适合内存,则必须为A文件的每一行打开和读取文件B:

代码语言:javascript
复制
try (FileReader frA = new FileReader(filenameA);
    BufferedReader brA = new BufferedReader(frA)) {
    String lineA;
    while ((lineA = brA.readLine()) != null) {
        String value = lineA.split(",")[0];
        try (FileReader frB = new FileReader(filenameB);
            BufferedReader brB = new BufferedReader(frB)) {
            boolean found = false;
            String lineB;
            while ((lineB = brB.readLine()) != null) {
                String[] values = lineB.split(",");
                if (value.equals(values[0])) {
                    if (!found) {
                        System.out.println("Matches for " + value + ":");
                    }
                    System.out.println(lineB);
                    found = true;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
} catch (IOException e) {
    e.printStackTrace();
}

如果数据确实在内存中,那么可以将所有行读入两个列表中,然后使用嵌套循环处理这些列表,或者将B文件行放入行开头的值索引的多机中,然后直接查找匹配的行。

代码语言:javascript
复制
ListMultimap<String, String> fileB = ArrayListMultimap.create();
try (FileReader frB = new FileReader(filenameB);
    BufferedReader brB = new BufferedReader(frB)) {
    String lineB;
    while ((lineB = brB.readLine()) != null) {
        String[] values = lineB.split(",");
        fileB.put(values[0], lineB); // map from first value to full line
    }
} catch (IOException e) {
    e.printStackTrace();
}

try (FileReader frA = new FileReader(filenameA);
    BufferedReader brA = new BufferedReader(frA)) {
    String lineA;
    while ((lineA = brA.readLine()) != null) {
        String value = lineA.split(",")[0];
        if (fileB.containsKey(value)) {
            System.out.println("Matches for " + value + ":");
            for (String line : fileB.get(value)) {
                System.out.println(line);
            }
        }
    }
} catch (IOException e) {
    e.printStackTrace();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23227409

复制
相关文章

相似问题

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