Finding repeated words on a string and counting the repetitions

后端 未结 29 896
梦谈多话
梦谈多话 2021-02-05 17:49

I need to find repeated words on a string, and then count how many times they were repeated. So basically, if the input string is this:

String s = \"House, House         


        
29条回答
  •  南方客
    南方客 (楼主)
    2021-02-05 18:20

    public class Counter {
    
    private static final int COMMA_AND_SPACE_PLACE = 2;
    
    private String mTextToCount;
    private ArrayList mSeparateWordsList;
    
    public Counter(String mTextToCount) {
        this.mTextToCount = mTextToCount;
    
        mSeparateWordsList = cutStringIntoSeparateWords(mTextToCount);
    }
    
    private ArrayList cutStringIntoSeparateWords(String text)
    {
        ArrayList returnedArrayList = new ArrayList<>();
    
    
        if(text.indexOf(',') == -1)
        {
            returnedArrayList.add(text);
            return returnedArrayList;
        }
    
        int position1 = 0;
        int position2 = 0;
    
        while(position2 < text.length())
        {
            char c = ',';
            if(text.toCharArray()[position2] == c)
            {
                String tmp = text.substring(position1, position2);
                position1 += tmp.length() + COMMA_AND_SPACE_PLACE;
                returnedArrayList.add(tmp);
            }
            position2++;
        }
    
        if(position1 < position2)
        {
            returnedArrayList.add(text.substring(position1, position2));
        }
    
        return returnedArrayList;
    }
    
    public int[] countWords()
    {
        if(mSeparateWordsList == null) return null;
    
    
        HashMap wordsMap = new HashMap<>();
    
        for(String s: mSeparateWordsList)
        {
            int cnt;
    
            if(wordsMap.containsKey(s))
            {
                cnt = wordsMap.get(s);
                cnt++;
            } else {
                cnt = 1;
            }
            wordsMap.put(s, cnt);
        }                
        return printCounterResults(wordsMap);
    }
    
    private int[] printCounterResults(HashMap m)
    {        
        int index = 0;
        int[] returnedIntArray = new int[m.size()];
    
        for(int i: m.values())
        {
            returnedIntArray[index] = i;
            index++;
        }
    
        return returnedIntArray;
    
    }
    

    }

提交回复
热议问题