在Java中,我有一个方法可以读入包含字典中所有单词的文本文件,每个单词都在各自的行上。 它通过使用for循环读取每一行,并将每个单词添加到ArrayList。 我想得到数组中最长字(String)的长度。另外,我想获得字典文件中最长单词的长度。将它分成几种方法可能会更容易,但我不知道语法。
到目前为止,代码是:
public class spellCheck {
static ArrayList <String> dictionary; //the dictonary file
/**
* load file
* @param fileName the file containing the dictionary
* @throws FileNotFoundException
*/
public static void loadDictionary(String fileName) throws FileNotFoundException {
Scanner in = new Scanner(new File(fileName));
while (in.hasNext())
{
for(int i = 0; i < fileName.length(); ++i)
{
String dictionaryword = in.nextLine();
dictionary.add(dictionaryword);
}
}
答案 0 :(得分:3)
假设每个单词都在它自己的行上,你应该更喜欢读取文件......
try (Scanner in = new Scanner(new File(fileName))) {
while (in.hasNextLine()) {
String dictionaryword = in.nextLine();
dictionary.add(dictionaryword);
}
}
请记住,如果您打开资源,则负责关闭。有关详细信息,请参阅The try-with-resources Statement
计算指标可以在阅读文件后完成,但既然你在这里,你就可以做类似......
int totalWordLength = 0;
String longest = "";
while (in.hasNextLine()) {
String dictionaryword = in.nextLine();
totalWordLength += dictionaryword.length();
dictionary.add(dictionaryword);
if (dictionaryword.length() > longest.length()) {
longest = dictionaryword;
}
}
int averageLength = Math.round(totalWordLength / (float)dictionary.size());
但你可以轻松地遍历dictionary
并使用相同的想法
(nb-我已经使用了局部变量,所以你要么想让它们成为类字段,要么将它们包装成某种&#34;指标&#34;类 - 你的选择)
答案 1 :(得分:0)
设置一个两个计数器和一个变量,用于保存在使用while循环读入之前找到的当前最长单词。要找到平均值,每次读取一行时,一个计数器会增加一个,并且第二个计数器会累计每个单词中的总字符数(显然,输入的字符总数除以读取的字总数 - - 由总行数表示 - 是每个单词的平均长度。
对于最长的单词,将最长的单词设置为空字符串或将某个虚拟值设置为单个字符。每次读取一行时,将当前单词与先前找到的最长单词进行比较(使用字符串上的.length()
方法查找其长度),如果更长时间设置了一个新的最长单词
此外,如果您在文件中包含所有这些内容,我会使用buffered reader来读取您的输入数据
答案 2 :(得分:0)
可能会有所帮助
String words = "Rookie never dissappoints, dont trust any Rookie";
// read your file to string if you get string while reading then you can use below code to do that.
String ss[] = words.split(" ");
List<String> list = Arrays.asList(ss);
Map<Integer,String> set = new Hashtable<Integer,String>();
int i =0;
for(String str : list)
{
set.put(str.length(), str);
System.out.println(list.get(i));
i++;
}
Set<Integer> keys = set.keySet();
System.out.println(keys);
System.out.println(set);
Object j[]= keys.toArray();
Arrays.sort(j);
Object max = j[j.length-1];
set.get(max);
System.out.println("Tha longest word is "+set.get(max));
System.out.println("Length is "+max);