Calculating frequency of each word in a sentence in java

前端 未结 19 1968
夕颜
夕颜 2020-11-29 10:15

I am writing a very basic java program that calculates frequency of each word in a sentence so far i managed to do this much

import java.io.*;

class Linked         


        
相关标签:
19条回答
  • 2020-11-29 11:08

    The following program finds the frequency, sorts it accordingly, and prints it.

    Below is the output grouped by frequency:

    0-10:
           The   2
           Is    4
    11-20:
           Have 13
           Done 15
    

    Here is my program:

    package com.company;
    import java.io.*;
    import java.util.*;
    import java.lang.*;
    
    /**
     * Created by ayush on 12/3/17.
     */
    
    public class Linked {
    
        public static void main(String args[]) throws IOException {
    
            BufferedReader br = new BufferedReader(
                    new InputStreamReader(System.in));
            System.out.println("Enter the sentence");
            String st = br.readLine();
            st=st.trim();
            st = st + " ";
            int count = lengthx(st);
            System.out.println(count);
            String arr[] = new String[count];
            int p = 0;
            int c = 0;
    
            for (int i = 0; i < st.length(); i++) {
                if (st.charAt(i) == ' ') {
                    arr[p] = st.substring(c,i);
                    System.out.println(arr[p]);
                    c = i + 1;
                    p++;
                }
            }
            Map<String, Integer> map = new HashMap<>();
    
            for (String w : arr) {
                Integer n = map.get(w);
                n = (n == null) ? 1 : ++n;
                map.put(w, n);
            }
            for (String key : map.keySet()) {
                System.out.println(key + " = " + map.get(key));
            }
    
            Set<Map.Entry<String, Integer>> entries = map.entrySet();
    
            Comparator<Map.Entry<String, Integer>> valueComparator = new Comparator<Map.Entry<String,Integer>>() {
    
                @Override
                public int compare(Map.Entry<String, Integer> e1, Map.Entry<String, Integer> e2) {
                    Integer v1 = e1.getValue();
                    Integer v2 = e2.getValue();
                    return v1.compareTo(v2); }
            };
    
            List<Map.Entry<String, Integer>> listOfEntries = new ArrayList<Map.Entry<String, Integer>>(entries);
            Collections.sort(listOfEntries, valueComparator);
    
            LinkedHashMap<String, Integer> sortedByValue = new LinkedHashMap<String, Integer>(listOfEntries.size());
    
            for(Map.Entry<String, Integer> entry : listOfEntries){
    
                sortedByValue.put(entry.getKey(), entry.getValue());
            }
    
            for(Map.Entry<String, Integer> entry : listOfEntries){
    
                sortedByValue.put(entry.getKey(), entry.getValue());
            }
    
            System.out.println("HashMap after sorting entries by values ");
            Set<Map.Entry<String, Integer>> entrySetSortedByValue = sortedByValue.entrySet();
            for(Map.Entry<String, Integer> mapping : entrySetSortedByValue){
                System.out.println(mapping.getKey() + " ==> " + mapping.getValue());
            }
    
    
        }
    
        static int lengthx(String a) {
            int count = 0;
            for (int j = 0; j < a.length(); j++) {
                if (a.charAt(j) == ' ') {
                    count++;
                }
            }
            return count;
        }
    }
    
    0 讨论(0)
  • 2020-11-29 11:09
    public class TestSplit {
    
        public static void main(String[] args) {
                String input="Find the repeated word which is repeated in this string";
                List<String> output= (List) Arrays.asList(input.split(" "));
    
                for(String str: output) {
                        int occurrences = Collections.frequency(output, str);
                        System.out.println("Occurence of " + str+ " is "+occurrences);
                }
    
                System.out.println(output);
        }
    
    }
    
    0 讨论(0)
  • 2020-11-29 11:13

    Try this

    public class Main
    {
    
        public static void main(String[] args)
        {       
            String text = "the quick brown fox jumps fox fox over the lazy dog brown";
            String[] keys = text.split(" ");
            String[] uniqueKeys;
            int count = 0;
            System.out.println(text);
            uniqueKeys = getUniqueKeys(keys);
    
            for(String key: uniqueKeys)
            {
                if(null == key)
                {
                    break;
                }           
                for(String s : keys)
                {
                    if(key.equals(s))
                    {
                        count++;
                    }               
                }
                System.out.println("Count of ["+key+"] is : "+count);
                count=0;
            }
        }
    
        private static String[] getUniqueKeys(String[] keys)
        {
            String[] uniqueKeys = new String[keys.length];
    
            uniqueKeys[0] = keys[0];
            int uniqueKeyIndex = 1;
            boolean keyAlreadyExists = false;
    
            for(int i=1; i<keys.length ; i++)
            {
                for(int j=0; j<=uniqueKeyIndex; j++)
                {
                    if(keys[i].equals(uniqueKeys[j]))
                    {
                        keyAlreadyExists = true;
                    }
                }           
    
                if(!keyAlreadyExists)
                {
                    uniqueKeys[uniqueKeyIndex] = keys[i];
                    uniqueKeyIndex++;               
                }
                keyAlreadyExists = false;
            }       
            return uniqueKeys;
        }
    }
    

    Output:

    the quick brown fox jumps fox fox over the lazy dog brown
    Count of [the] is : 2
    Count of [quick] is : 1
    Count of [brown] is : 2
    Count of [fox] is : 3
    Count of [jumps] is : 1
    Count of [over] is : 1
    Count of [lazy] is : 1
    Count of [dog] is : 1
    
    0 讨论(0)
  • 2020-11-29 11:13

    Simply use Java 8 Stream collectors groupby function:

        import java.util.function.Function;
        import java.util.stream.Collectors;  
    
        static String[] COUNTRY_NAMES 
      = { "China", "Australia", "India", "USA", "USSR", "UK", "China", 
      "France", "Poland", "Austria", "India", "USA", "Egypt", "China" };
    
        Map<String, Long> result = Stream.of(COUNTRY_NAMES).collect(
                Collectors.groupingBy(Function.identity(), Collectors.counting()));
    
    0 讨论(0)
  • 2020-11-29 11:14
    class find
    {
        public static void main(String nm,String w)
        {
            int l,i;
            int c=0;
    
    
            l=nm.length();String b="";
    
            for(i=0;i<l;i++)
            {
                char d=nm.charAt(i);
                if(d!=' ')
                {
                    b=b+d;
                }
                if(d==' ')
                {
                    if(b.compareTo(w)==0)
                    {
                        c++;
    
                    } 
                   b="";           
                }        
            }       
            System.out.println(c);
        }
    }
    
    0 讨论(0)
  • 2020-11-29 11:14
    import java.io.*;
    
    class Linked {
    
        public static void main(String args[]) throws IOException {
    
            BufferedReader br = new BufferedReader(
                new InputStreamReader(System.in));
            System.out.println("Enter the sentence");
            String st = br.readLine();
            st = st + " ";
            int a = lengthx(st);
            String arr[] = new String[a];
            int p = 0;
            int c = 0;
    
            for (int j = 0; j < st.length(); j++) {
                if (st.charAt(j) == ' ') {
                    arr[p++] = st.substring(c,j);
                    c = j + 1;
                }
            }
        }
    
        static int lengthx(String a) {
            int p = 0;
            for (int j = 0; j < a.length(); j++) {
                if (a.charAt(j) == ' ') {
                    p++;
                }
            }
            return p;
        }
    }
    
    0 讨论(0)
提交回复
热议问题