将关键字存储在集合中并使用地图Java读取它们

时间:2013-03-08 02:35:46

标签: java map set

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

我想阅读“结束”,“如此”和“因为”等特定字词,使用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来完善关键字。

3 个答案:

答案 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

我希望它有所帮助。