我有一个包含以下格式数据的文本文件:
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]]
请提供任何帮助:)
答案 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)
我正在讨论的代码中存在一些问题,如果这对您有帮助的话。
正如您所说,key.length = # of words
,如果没有阅读整个文件,您怎么知道有多少独特的单词?你没有在你的问题中提到这一点,这使你的问题模糊不清!
更重要的是,String[] keys = line1.split(":");
应该为您提供key.length = 3
,因为您的输入格式为word:filename:wordCount
。
在内部for循环中,for (int j=0; j<4; j++)
- 为什么迭代四次?你应该迭代3次,对吗?
所以,这个想法应该是 - 遍历文件中的每一行,然后遍历由:
分隔的一行中的每个项目。
尝试在编写程序时从逻辑上思考你在做什么!