1

我创建了一个包含文本的文件。

我想读取特定的单词,如“end”、“so”和“because”,用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”);
...

我不知道我怎么能从这里去使用Mapfine 关键字。

4

3 回答 3

0

只需使用 aMap作为映射形式 a 中的键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();
于 2013-03-08T02:40:28.923 回答
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);
        }
    }
}
于 2013-03-08T02:55:50.870 回答
0

关于从文件中读取文本,您可以遵循此处介绍的一些方法。

现在关于提取关键字,您可以跳过该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

我希望它有所帮助。

于 2013-03-08T02:56:01.700 回答