我试图用三种实例方法编写一个程序,但我似乎无法做到正确。我的方法wordCount返回文件中的行数。不是它应该的字数。
我只是迷失在方法mostFrequentWords ..
希望有人可以帮助我
package opgaver;
import java.util.*;
import java.io.*;
public class TextAnalysis14 {
Scanner file;
int CountWords = 0;
boolean Contains = true;
String[] words;
String[] MFwords;
public TextAnalysis14(String sourceFileName, int maxNoOfWords) {
String wordline;
words = new String[maxNoOfWords];
String[] line;
try {
file = new Scanner(new File(sourceFileName));
} catch (FileNotFoundException e) {
file = new Scanner("");
}
while (file.hasNext()) {
wordline = file.next();
line = wordline.split("[^a-zA -Z]+");
for (int i = 0; i < line.length; i++) {
if (!line[i].equals(" ")) {
words[CountWords] = line[i];
CountWords++;
}
}
}
if (words[CountWords] == (null)) {
for (int i = CountWords; i < maxNoOfWords; i++) {
words[i] = ("empty");
}
}
}
public int wordCount() {
return CountWords;
}
public boolean contains(String word) {
for (int i = 0; i < words.length; i++) {
if (words[i].contains(word)) {
return Contains;
}
}
return false;
}
public String[] mostFrequentWords() {
Arrays.sort(words);
return MFwords;
}
}
答案 0 :(得分:0)
致电wordline = file.next();
,你不是在读行。
在TextAnalysis14
中将您的状况更改为file.hasNextLine()
,并使用file.nextLine()
while (file.hasNextLine()) {
wordline = file.nextLine();
....
}
答案 1 :(得分:0)
由于我的菜鸟状态,我无法发表评论,但看起来你的正则表达式在A和-Z之间有空格。
答案 2 :(得分:0)
试试这个。
public static void main(String[] args) {
String str = "this is a space String"; // read all lines in a file
String[] splited = str.split(" ");
List<String> list = new ArrayList<String>();
for(int i = 0;i < splited.length; i++){
if(splited[i].length() > 0){
list.add(splited[i]);
}
}
System.out.println(list.size());
}
答案 3 :(得分:-1)
您可以使用Java 8尝试类似的东西:
Stream<String> lines = Files.lines(Paths.get("c:/", "file.txt"));
in wordCount = lines.mapToInt(s -> s.split(' ').length()).sum();
此功能只需在文件中计算单词数。