从文本文件-java

时间:2017-03-09 21:38:12

标签: java matrix

我有一个包含以下格式数据的文本文件:

word:filename:wordCount

我想创建一个矩阵,其值如下:

the length of the matrix is same the number of the words in the file
the width is the number of the files.

例如:

apple:file1:2
apple:file3:4
cat:file1:3
tea:file2:5
ugly:file4:3

长度= 5 宽度= 4

我想要输出:

apple:[2,0,4,0]
cat:[3,0,0,0]
tea:[0,5,0,0]
ugle:[0,0,0,3]

我尝试阅读文本文件,然后按":"

分割线条
String[] keys = line1.split(":");

然后我创建了一个像这样的两个dimentonal数组:

String s[][]=new String[4][4];//the 4=the # of words, 4=number of files

我添加4,因为我不知道如何从文件中获取多少文件

for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
        String h=keys[2];//the word count
        s[i][j]=h;
    }
}
System.out.println(Arrays.deepToString(s))

我得到的输出是:

[[2, 2, 2], [2, 2, 2], [2, 2, 2]]
[[4, 4, 4], [4, 4, 4], [4, 4, 4]]
[[3, 3, 3], [3, 3, 3], [3, 3, 3]]
[[5, 5, 5], [5, 5, 5], [5, 5, 5]]
[[3, 3, 3], [3, 3, 3], [3, 3, 3]]

请提供任何帮助:)

2 个答案:

答案 0 :(得分:0)

从您的首选输出看起来您正在尝试构建整数数组的映射

这就是我要做的事情

package q42705914;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

public class Counter {
    private static final int MAX_FILES = 4;
    private final Map<String, int[]> counts = new HashMap<>();

    public Counter() {
        countAll("rawCounts.txt");
        print();
    }

    private void countAll(String filename) {
        try(FileReader fileReader = new FileReader(filename);
        BufferedReader bufferedReader = new BufferedReader(fileReader)) {
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                countLine(line);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private void countLine(String line) {
        String[] parts = line.split(":");

        if(!counts.containsKey(parts[0])) {
            counts.put(parts[0], new int[MAX_FILES]);
        }
        int[] count = counts.get(parts[0]);

        int filenumber = Integer.valueOf(parts[1].substring(4));

        count[filenumber-1] = count[filenumber-1] + Integer.valueOf(parts[2]); 
    }

    private void print() {
        for(Entry<String, int[]> e : counts.entrySet()) {
            System.out.println(e.getKey() + ":" + Arrays.toString(e.getValue()));
        }
    }

    public static void main(String[] args) throws IOException {
        new Counter();
    }
}

答案 1 :(得分:0)

我正在讨论的代码中存在一些问题,如果这对您有帮助的话。

  1. 正如您所说,key.length = # of words,如果没有阅读整个文件,您怎么知道有多少独特的单词?你没有在你的问题中提到这一点,这使你的问题模糊不清!

  2. 更重要的是,String[] keys = line1.split(":");应该为您提供key.length = 3,因为您的输入格式为word:filename:wordCount

  3. 在内部for循环中,for (int j=0; j<4; j++) - 为什么迭代四次?你应该迭代3次,对吗?

  4. 所以,这个想法应该是 - 遍历文件中的每一行,然后遍历由:分隔的一行中的每个项目。

    尝试在编写程序时从逻辑上思考你在做什么!