我创建了一个包含文本的文件。
我想阅读“结束”,“如此”和“因为”等特定字词,使用Set
存储这些关键字,并使用Map
显示所有关键字和重复次数
你能告诉我应该怎么做吗?
...
openButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser();
int chosenFile = fileChooser.showOpenDialog(null);
if(chosenFile == JFileChooser.APPROVE_OPTION){
File selectedFile = fileChooser.getSelectedFile();
if ( selectedFile.canRead()){
Set<String> keywordList = new HashSet<String>();
keywordList.add("and");
keywordList.add("so");
keywordList.add("because”);
...
我不知道如何从这里开始使用Map
来完善关键字。
答案 0 :(得分:0)
只需使用Map
作为地图中的关键字Set
。
Map<String, Integer> keywordCount = new HashMap<String, Integer>();
keywordCount.add("and", 0);
keywordCount.add("so", 0);
keywordCount.add("because”, 0);
Set<String> keywords = keywordCount.keySet();
答案 1 :(得分:0)
openButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser fileChooser = new JFileChooser();
int chosenFile = fileChooser.showOpenDialog(null);
if(chosenFile == JFileChooser.APPROVE_OPTION){
File selectedFile = fileChooser.getSelectedFile();
if ( selectedFile.canRead()){
Set<String> keywordList = new HashSet<String>();
Map<String, Integer> keywordCount = new HashMap<String, Integer>();
keywordList.add("and");
keywordList.add("so");
keywordList.add("because”);
StringBuffer fileContent = new StringBuffer();
java.io.BufferedReader br;
try{
// Read file content
br = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(selectedFile)));
String line = null;
while((line = br.readLine()) != null){
fileContent.append(line).append("\n");
}
}catch(java.io.IOException ioe){
ioe.printStackTrace();
}finally{
if(br != null){
br.close();
}
}
// Get the number of occurrences for each keyword.
Iterator<String> iterKeywords = keywordList.iterator();
while(iterKeywords.hasNext()){
String currentKeyword = iterKeywords.next();
Pattern p = Pattern.compile(currentKeyword);
Matcher m = p.matcher(fileContent.toString());
int count = 0;
while(m.find()){
count ++;
}
keywordCount.put(currentKeyword, new Integer(count));
}
System.out.println(keywordCount);
}
}
}
答案 2 :(得分:0)
关于阅读文件中的文字,您可以按照here提供的方法进行操作。
现在关于提取关键字,您可以跳过Set
部分,直接从文字转到Map
。
根据您的问题,我假设您已经拥有关键字。
使用Apache Commons commons-lang3-3.1 StringUtils,您可以这样做:
public static Map<String, Integer> countKeywords(String text, List<String> keywords) {
Map<String, Integer> result = new HashMap<>();
for (String keyword : keywords) {
int count = StringUtils.countMatches(text, keyword);
result.put(keyword, count);
}
return result;
}
并按照以下方式进行测试:
public static void main(String args[]) {
String text = "Mirror mirror on the wall wall, true hope lies beyond the coast...";
List<String> keywords = new ArrayList<>();
keywords.add("mirror");
keywords.add("wall");
keywords.add("sword");
Map<String, Integer> result = countKeywords(text, keywords);
for (Map.Entry<String, Integer> entry : result.entrySet()) {
System.out.println("keyword: " + entry.getKey() + " >>> count: " + entry.getValue());
}
}
我刚刚将countKeywords
方法设为静态,因此您可以复制/粘贴以对其进行测试。
不要忘记下载commons-lang3-3.1.jar并将其添加到您的类路径中。
此测试输出如下内容:
keyword: mirror >>> count: 1
keyword: wall >>> count: 2
keyword: sword >>> count: 0
我希望它有所帮助。