Java源码——字符串中的词频统计(counts the number of occurrences of each word in a String)

 

源码:

//Fig. 16.18: WordTypeCount.java
//Program counts the number of occurrences of each word in a String.
import java.util.Map;
import java.util.HashMap;
import java.util.Set;
import java.util.TreeSet;
import java.util.Scanner;

public class WordTypeCount
{
public static void main(String[] args)
{
   // create HashMap to store String keys and Integer values
   Map<String, Integer> myMap = new HashMap<>(); 

   createMap(myMap); // create map based on user input
   displayMap(myMap); // display map content
} // end main

// create map from user input
private static void createMap(Map<String, Integer> map) 
{
   Scanner scanner = new Scanner(System.in); // create scanner
   System.out.println("Enter a string:"); // prompt for user input
   String input = scanner.nextLine();

   // tokenize the input
   String[] tokens = input.split(" ");
            
   // processing input text 
   for (String token : tokens) 
   {
      String word = token.toLowerCase(); // get lowercase word
               
      // if the map contains the word
      if (map.containsKey(word)) // is word in map
      {
         int count = map.get(word); // get current count
         map.put(word, count + 1); // increment count
      } 
      else 
         map.put(word, 1); // add new word with a count of 1 to map
   } 
} 

// display map content
private static void displayMap(Map<String, Integer> map) 
{     
   Set<String> keys = map.keySet(); // get keys

   // sort keys
   TreeSet<String> sortedKeys = new TreeSet<>(keys);

   System.out.printf("%nMap contains:%nKey\t\tValue%n");

   // generate output for each key in map
   for (String key : sortedKeys)
      System.out.printf("%-10s%10s%n", key, map.get(key));
   
   System.out.printf(
      "%nsize: %d%nisEmpty: %b%n", map.size(), map.isEmpty());
} 
} // end class WordTypeCount

运行结果:

Enter a string:
English is widely used in the world you have to learn English very hard to use it very well

Map contains:
Key        Value
english            2
hard               1
have               1
in                 1
is                 1
it                 1
learn              1
the                1
to                 2
use                1
used               1
very               2
well               1
widely             1
world              1
you                1

size: 16
isEmpty: false

ite a C++ program that counts the number of occurrences of each letter of an input string, case-insensitive. Here's one way you could do it: ```cpp #include <iostream> #include <string> #include <map> #include <cctype> int main() { std::string input; std::getline(std::cin, input); // read input from user std::map<char, int> letterCounts; // map to store letter counts for (char c : input) { if (std::isalpha(c)) { // ignore non-letter characters char lowercase = std::tolower(c); // convert to lowercase letterCounts[lowercase]++; // increment count of this letter } } // print out the results for (auto pair : letterCounts) { std::cout << pair.first << ": " << pair.second << std::endl; } return 0; } ``` This program starts by reading in a string from the user using `std::getline()`. It then creates a `std::map<char, int>` called `letterCounts` to store the counts of each letter. The `for` loop iterates over each character in the input string, checking if it is a letter using `std::isalpha()`. If it is a letter, it converts it to lowercase using `std::tolower()` and increments the count of that letter in the `letterCounts` map. Finally, the program prints out the results by iterating over the `letterCounts` map and printing out each letter and its count. Note that the `auto` keyword is used to simplify the loop syntax - `pair` is automatically inferred to be a `std::pair<char, int>`. This program should work for any input string, regardless of its length or the specific letters it contains.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值