我正在尝试读取文件中每个单词的出现次数,并将其存储在带有出现次数的散列映射中。这是我的代码。
public static void main(String[] args) {
try {
HashMap<String, Integer> map = sortingFromAFile("file.txt");
printMap(map);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public static HashMap sortingFromAFile(String fileName) throws FileNotFoundException {
HashMap<String, Integer> map = new HashMap<String, Integer>();
Integer count = 1;
File file = new File(fileName);
Scanner sc = null;
try {
sc = new Scanner(file);
while(sc.hasNextLine()){
String line = sc.nextLine();
if (map.containsKey(line)){
map.put(line, count++);
}
map.put(line, count);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return map;
}
public static void printMap(HashMap map){
Iterator it = map.entrySet().iterator();
while(it.hasNext()){
Map.Entry pairs = (Map.Entry)it.next();
System.out.println(pairs.getKey() + ":" + pairs.getValue() );
}
}
程序运行时打印出文件中的文本。我在这里做错了什么。
答案 0 :(得分:0)
您需要拆分线然后使用地图,否则您只是阅读并添加线条,如果线条不相同,则每条线条会出现1次。
String [] words= line.split("[\\W]");
答案 1 :(得分:0)
您有一个计数错误以及Scanner
类的错误使用,更改:
while(sc.hasNextLine()){
String line = sc.nextLine();
if (map.containsKey(line)){
map.put(line, count++);
}
map.put(line, count);
}
为:
while(sc.hasNext()){
String word = sc.next();
if (map.containsKey(word)){
map.put(word, map.get(word)+1);
}
else {
map.put(word, 1);
}
}
答案 2 :(得分:0)
我已经编写了这段代码,适用于您输入的任何类型的String,它返回带有长度的重复单词,也许这对您有任何帮助,您可以根据您的内容轻松更改它以便从文件中读取需要,您可以使用hashmap存储每行中重复单词的出现,然后将其与最后一行的匹配单词进行比较,依此类推。
import java.util.Arrays;
import java.util.Scanner;
/ ** * @author ArslanAppstellation * * /
public class RedundancyDetector {
/**
* @param args
*/
public static void main(String[] args) {
String userinput = "";
while (true) {
Scanner scanner = new Scanner(System.in);
userinput = scanner.nextLine().replaceAll("\\s", "");
if (userinput.contains("letsquit")) {
break;
}
System.out.println(redudantString(userinput));
}
}
public static String redudantString(String longStringOfCharacters) {
// form the N Parts
int N = longStringOfCharacters.length();
String[] stringParts = new String[N];
for (int i = 0; i < N; i++) {
stringParts[i] = longStringOfCharacters.substring(i, N);
}
// sort them
Arrays.sort(stringParts);
String longest = "";
for (int i = 0; i < N - 1; i++) {
String iteratedLongest = matchWords(stringParts[i],
stringParts[i + 1]);
if (iteratedLongest.length() > longest.length())
longest = iteratedLongest;
}
System.out.println(longest.length());
return longest;
}
public static String matchWords(String ithElement, String ithplus1Element) {
int length = Math.min(ithElement.length(), ithplus1Element.length());
for (int i = 0; i < length; i++) {
if (ithElement.charAt(i) != ithplus1Element.charAt(i))
return ithElement.substring(0, i);
}
return ithElement.substring(0, length);
} }