编写程序,打开一篇英文文章(存在当前目录下的文件in.txt中),为该文章生成词汇表(存到当前目录下的另一个文件words.txt中)。文章中单词指的是只由小写或大写字母组成的字符串,但词汇表中的单词都是以小写字母的形式出现,若文章中出现多个大小写无关的相同单词,只在词汇表中生成一个单词。假设生成的词汇表中单词个数不会超过100个,且每个单词的长度不会超过20。词汇表中的单词以字典顺序由小到大存放。
时间: 2024-02-25 08:55:19 浏览: 271
以下是Java代码实现:
```java
import java.io.*;
import java.util.*;
public class GenerateWords {
public static void main(String[] args) {
String inputFileName = "in.txt";
String outputFileName = "words.txt";
// 读入文章
String content = readFile(inputFileName);
// 提取单词
Set<String> wordSet = extractWords(content);
// 将单词排序并输出到文件
List<String> wordList = new ArrayList<>(wordSet);
Collections.sort(wordList);
writeToFile(wordList, outputFileName);
}
/**
* 读取文件内容
*/
private static String readFile(String fileName) {
StringBuilder sb = new StringBuilder();
try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append(" ");
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
/**
* 提取单词
*/
private static Set<String> extractWords(String content) {
Set<String> wordSet = new HashSet<>();
String[] words = content.split("[^a-zA-Z]+");
for (String word : words) {
if (word.matches("[a-zA-Z]+")) {
wordSet.add(word.toLowerCase());
}
}
return wordSet;
}
/**
* 将单词写入文件
*/
private static void writeToFile(List<String> wordList, String fileName) {
try (BufferedWriter bw = new BufferedWriter(new FileWriter(fileName))) {
for (String word : wordList) {
bw.write(word);
bw.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
代码思路:
1. 首先读取指定文件中的文章内容。
2. 提取文章中的单词,并将其转换为小写形式,存储到一个Set集合中,Set集合可以去重。
3. 将Set集合中的单词转换为List,然后进行排序。
4. 将排序后的单词写入到指定的文件中。
注意事项:
1. 单词的提取需要使用正则表达式,"[^a-zA-Z]+" 可以匹配所有非字母字符,"[a-zA-Z]+" 可以匹配所有字母字符。
2. 在写入文件时,需要使用BufferedWriter类,这样可以提高效率。
3. 在try-with-resources语句中使用BufferedReader和BufferedWriter类,可以避免手动关闭文件流,代码更简洁。
阅读全文