Write a program that gets an array of words and does the following:
Here's a sample run assuming the array of words as {i , came , i , saw , i , conquered}
Note: Order doesn't matter in any of the above outputs.
- Prints each word and it's frequency
- Prints only the words
- Prints only the frequency of all words
Here's a sample run assuming the array of words as {i , came , i , saw , i , conquered}
- saw : 1
- came : 1
- conquered : 1
- i : 3
- [sa, cam, cons, i]
- [1, 1, 1, 3]
Note: Order doesn't matter in any of the above outputs.
SOLUTION:
import java.util.Scanner; import java.util.StringTokenizer; import java.util.Map; import java.util.HashMap; import java.util.Set; public class MapExample { public static void main(String[] args){ //Scanner object Scanner input = new Scanner(System.in); //Reading the line System.out.print("Enter the line of words: "); String line = input.nextLine(); //Creating String tokenizer for line StringTokenizer tokenizer = new StringTokenizer(line); //Creating and Adding words to the map int count=0; String word; Map< String,Integer > map = new HashMap< String,Integer >(); while(tokenizer.hasMoreTokens()){ word = tokenizer.nextToken(); if(map.containsKey(word)){ count = map.get(word); map.put(word, count+1); } else{ map.put(word, 1); } }//End map creator //Creating set for the map Set< String > list = map.keySet(); //Printing duplicate words with frequency for ( String word2 : list ) { System.out.printf("%s : %s\n",word2,map.get(word2)); } //Printing only the words System.out.println(list); //Printing only frequency System.out.print("[ "); for ( String word2 : list ) { System.out.print(map.get(word2)+ " "); } System.out.println("]"); }//End main method }//End class
No comments:
Post a Comment