有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从一个类调用另一个类中字符串上的方法(hashmap/hashset)。

我的代码是:

public class Main{

    public static void main(String[] args){
        WordGroup wordgroupOne= new WordGroup ("You can discover more about a person in an hour of play than in a year of conversation");
        WordGroup wordgroupTwo= new WordGroup ( "When you play play hard when you work dont play at all");

        String[] quoteOne = wordgroupOne.getWordArray();    
        String[] quoteTwo = wordgroupTwo.getWordArray();

        for (String words : quoteOne){
            System.out.println(words);
        }

        for (String words : quoteTwo){                     
            System.out.println(words);
        }

    }

}

字组类别:

import java.util.HashSet;
import java.util.HashMap;

public class WordGroup {
    public String words;

    public WordGroup (String getWords){
        words = getWords.toLowerCase();
    }

    public String[] getWordArray(){
        return words.split(" ");   
    }

    public HashSet<String> getWordSet(){
        HashSet<String> set = new HashSet<String>();
        String[] p = getWordArray();
        for (String items : p){
            set.add(items);
        }
        System.out.println(set);
        return set;
    }

    public HashMap<String, Integer> getWordCounts() {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        String[] q = getWordArray();
        for (String stuff : q) {
            Integer oldVal = map.get(stuff);
            if (oldVal == null){
                oldVal = 0;
            }
            map.put(stuff, oldVal+1);
        }
        System.out.println(map);
        return map;
    }

}

我要做的是使用getWordSet()方法,使用两个字组和 对返回的哈希集进行迭代或循环,并打印其中的单词

对两个字组调用getWordCounts()。使用keySet()检索密钥集。循环此集合并打印出两个词组的单词及其计数

使用getWordSet()方法生成两个词组中所有单词的完整集合。 循环新的HashSet以打印所有单词的完整列表,其中包含每个hashmap的总和计数

我正在与所有这些做斗争。非常感谢您的帮助


共 (1) 个答案

  1. # 1 楼答案

    如果要创建组合列表或集合,必须将列表和地图合并在一起。我把练习留给你

     public static void main(String[] args)
     {
    
        WordGroup wg1 = new WordGroup(
                "You can discover more about a person in an hour of play than in a year of conversation");
        WordGroup wg2 = new WordGroup(
                "When you play play hard when you work dont play at all");
    
        wg1.processWord();
    
        // iterate through all the distinct words
        Set<String> dw1 = wg1.getDistinctWords();
        for (String s : dw1)
        {
            System.out.println(s);
        }
    
        // use map entry to iterate through the entry set
        Map<String, Integer> wc1 = wg1.getWordCounts();
        for (Map.Entry<String, Integer> entry : wc1.entrySet())
        {
            if (entry != null)
            {
                // use stringbuilder to build a temp string
                // instead of using +
                StringBuilder sb = new StringBuilder();
                sb.append(entry.getKey());
                sb.append(": ");
                sb.append(entry.getValue());
    
                System.out.println(sb);
            }
        }
    
    }
    
     public class WordGroup
     {
    // as a class, made the results of the process private
    private String originalWord;
    // we declare generic versions of the Collections, instead of the specific
    // implementation
    private Set<String> distinctWords;
    private Map<String, Integer> wordCounts;
    
    public WordGroup(String s)
    {
        this.originalWord = s;
        // here we declare and initialize the specific implementation
        this.distinctWords = new HashSet<String>();
        this.wordCounts = new HashMap<String, Integer>();
    }
    
    public void processWord()
    {
        List<String> toProcess = getWordList();
        if (toProcess != null && !toProcess.isEmpty())
        {
            for (String s : toProcess)
            {
                // the set will automatically figure out if it should be in the
                // set or not.
                this.distinctWords.add(s);
                // call the update or insert method
                upsertString(s);
            }
        }
    }
    
    // this splits the string into a list
    // you could probably use a utility class from guava or something to do this
    // but i have coded a naive version
    private List<String> getWordList()
    {
        List<String> splitList = new ArrayList<String>();
    
        // check to see if there is anything there
        if (this.originalWord != null && !this.originalWord.isEmpty())
        {
            String lowered = this.originalWord.toLowerCase();
    
            String[] splits = lowered.split(" ");
            if (splits != null)
            {
                int iSize = splits.length;
                if (iSize > 0)
                {
                    // basically create a string
                    for (int i = 0; i < iSize; i++)
                    {
                        splitList.add(splits[i]);
                    }
                }
            }
        }
    
        return splitList;
    }
    
    // helper method to see if we need to add to the count
    private void upsertString(String s)
    {
        if (s != null && !s.isEmpty())
        {
            if (this.wordCounts != null)
            {
                // default to 1, if its an insert
                Integer newCount = 1;
    
                // if it already exists we want to update
                if (this.wordCounts.containsKey(s))
                {
                    Integer currentCount = this.wordCounts.get(s);
                    if (currentCount != null)
                    {
                        // update the count by 1
                        newCount += currentCount;
                    }
                }
    
                // insert the new item
                // or overwrite, because it is the same key to the new count
                this.wordCounts.put(s, newCount);
            }
        }
    }
    
    public String getOriginalWord()
    {
        return this.originalWord;
    }
    
    public void setOriginalWord(String originalWord)
    {
        this.originalWord = originalWord;
    }
    
    public Set<String> getDistinctWords()
    {
        return this.distinctWords;
    }
    
    public void setDistinctWords(Set<String> distinctWords)
    {
        this.distinctWords = distinctWords;
    }
    
    public Map<String, Integer> getWordCounts()
    {
        return this.wordCounts;
    }
    
    public void setWordCounts(Map<String, Integer> wordCounts)
    {
        this.wordCounts = wordCounts;
    }
    
    }