In Java How to get distinct characters with their count in a String?

In this tutorial we will go over how to get distinct characters with their count in a String?

We will use 3 strings:

  • crunchify
  • crunchify.com
  • Best Tech Blog – crunchify

This program will iterate over all characters and counts the number of times character appears.

Here is a complete program

JavaDistinctChar.java

package crunchify.java.tutorials;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 *
 * @author https://crunchify.com
 * In Java How to get distinct characters with their count in a String?
 *
 */

public class JavaDistinctChar {

        public static void main(String[] args) {

            crunchifyPrintDistinctChar("crunchify");
            crunchifyPrintDistinctChar("crunchify.com");
            crunchifyPrintDistinctChar("Best Tech Blog - crunchify");
        }
        private static void crunchifyPrintDistinctChar(String input) {

            // Map: An object that maps keys to values.
            // A map cannot contain duplicate keys; each key can map to at most one value.
            Map<Character, Integer> crunchifyCountMap = new HashMap<>();

            for (char c : input.toCharArray())
                // merge(): If the specified key is not already associated with a value or is associated with null,
                // associates it with the given non-null value.
                // Otherwise, replaces the associated value with the results of the given remapping function, or removes if the result is null.
                crunchifyCountMap.merge(c, 1, Integer::sum);
            crunchifyPrint(crunchifyCountMap);

            // mapToObj(): Returns an object-valued Stream consisting of the results of applying the given function to the elements of this stream.
            List<Character> list = input.chars().mapToObj(c -> (char) c).toList();

            // forEach(): Performs the given action for each element of the Iterable until all elements have been processed or the action throws an exception.
            // Actions are performed in the order of iteration, if that order is specified. Exceptions thrown by the action are relayed to the caller.
            // The behavior of this method is unspecified if the action performs side-effects that modify the underlying source of elements,
            // unless an overriding class has specified a concurrent modification policy.
            list.forEach(c -> crunchifyCountMap.merge(c, 1, Integer::sum));

            crunchifyPrint(crunchifyCountMap);
        }

    // Simple Print Method
    private static void crunchifyPrint(Map<Character, Integer> crunchifyCountMap) {
            System.out.println(crunchifyCountMap);
    }

}

Just run above program as Java Application and you will see result as below.

{r=1, c=2, u=1, f=1, h=1, y=1, i=1, n=1}
{r=2, c=4, u=2, f=2, h=2, y=2, i=2, n=2}
{r=1, c=3, u=1, f=1, h=1, y=1, i=1, m=1, .=1, n=1, o=1}
{r=2, c=6, u=2, f=2, h=2, y=2, i=2, m=2, .=2, n=2, o=2}
{ =4, B=2, c=3, e=2, f=1, g=1, h=2, i=1, l=1, -=1, n=1, o=1, r=1, s=1, T=1, t=1, u=1, y=1}
{ =8, B=4, c=6, e=4, f=2, g=2, h=4, i=2, l=2, -=2, n=2, o=2, r=2, s=2, T=2, t=2, u=2, y=2}

Process finished with exit code 0

Let me know if you have any question running this.

The post In Java How to get distinct characters with their count in a String? appeared first on Crunchify.