我正在尝试创建一个程序,用于计算单词在文本中出现的次数,并告诉您每行出现的次数。我已经设法找到单词出现的次数和文本中的行数,但我找不到单词出现在哪行以及多少次。请你帮助我好吗?到目前为止,这是我的代码:
FileReader file = new FileReader("C:/Users/User/Desktop/test.txt");
BufferedReader buffer = new BufferedReader(file);
String line = buffer.readLine();
Map<String, Integer> hash = new HashMap<String, Integer>();
int counter = 0; //number of lines
while (line != null){
String[] words = line.split(" ");
for (String s : words) {
Integer i = hash.get(s);
hash.put(s, (i==null)? 1: i+1);
}
line = buffer.readLine();
counter = counter + 1;
}
System.out.println(hash);
System.out.println(counter);
答案 0 :(得分:1)
这是每行的附加信息。你只需要在每一行上都有一个计数信息,因此简单的Map是不够的,你需要每行的Map Map。
有两种基本方法:
Map<Integer, Map<String, Integer>> hashOfHash = new HashMap<>();
List<Map<String, Integer>> list = new ArrayList<>();
第一行根据整数键值创建地图的地图 - 这就是行。
第二行是创建地图列表,因为存储了列表中的顺序,现在可以通过迭代它来到哪一行。
我会推荐第二行。
您还需要稍微修改您的while循环,以便为每一行创建新的地图(考虑一下,您需要像在第一行那样做)。
例如,这应该与您的程序相同,但它会显示每行的结果:
public static void main(String[] args) throws FileNotFoundException, IOException {
FileReader file = new FileReader("C:/Users/User/Desktop/test.txt");
BufferedReader buffer = new BufferedReader(file);
String line = buffer.readLine();
List<Map<String, Integer>> list = new ArrayList<>();
while (line != null) {
Map<String, Integer> hash = new HashMap<String, Integer>();
String[] words = line.split(" ");
for (String s : words) {
Integer i = hash.get(s);
hash.put(s, (i == null) ? 1 : i + 1);
}
line = buffer.readLine();
list.add(hash);
}
int i=0;
for (Map<String, Integer> mapAtRow : list) {
i++;
System.out.println("at row " + i + "we found this: " + mapAtRow);
}
}
答案 1 :(得分:0)
这是一个递归方法,允许您使用String.indexOf计算单词出现在一行中的次数。
您已从bufferedReader
中读取该行String line = buffer.readLine();
然后在你的循环中你有
for (String s : words) {
int numberOfOccurencesOfS = countNumberOfTimesInALine(line,s);
}
countNumberOfTimesInALine
接收原始行和您计算的单词作为参数。要使用它,您还应该声明一个类变量,如下所示:
private static int numberOfLineOccurences;
这是方法
public static int countNumberOfTimesInALine(String line, String word) {
if (line.indexOf(word) == -1) {
return numberOfLineOccurences;
} else {
numberOfLineOccurences++;
if (line.indexOf(word) + word.length() > line.length() -1 ) {
return numberOfLineOccurences;
}
return countNumberOfTimesInALine(
line.substring(line.indexOf(word) + word.length()), word );
}
}
以下是一个用法示例:
String line = "DEMO TEST DEMO TEST DEMO TEST ALPHA BETA GAMMA";
System.out.println("Number of occurences of TEST is " + countNumberOfTimesInALine(line, "TEST"));
结果如下
TEST的出现次数是3
我已发布与您here
类似问题的答案