Java Program to Find Duplicate Words in a String - 3 Ways
In this section, we will show you three different ways to find duplicate words in a given String in Java.
1. Using For loop and Map
2. Using Java 8 Streams
3. Using Google Guava MultiSet
Example 1: Using For loop and Map
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
String string = "Java Python Go C# Java Python Java Go C";
//Split the string into words based on whitespace
String words[] = string.split(" ");
Map<String, Integer> occurrences = new HashMap<>();
//Iterate through String array
for ( String word : words ) {
Integer oldCount = occurrences.get(word);
if ( oldCount == null ) {
oldCount = 0;
}
occurrences.put(word, oldCount + 1);
}
for (Map.Entry<String,Integer> entry : occurrences.entrySet())
if(entry.getValue()>1){
System.out.println(entry.getKey());
}
}
}
1. split() method in Java splits a string into substrings using a delimiter that is specified using a regular expression. Here delimiter is whitespace.
2. Then we iterate over String array and put the word and word count inside HashMap.
3. Finally iterate the Map and print the elements whose value is greater than one.
Console Output:
Java
Go
Python
Java
Go
Python
Example 2: Using Java 8 Streams
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
String string = "Java Python Go C# Java Python Java Go C";
List<String> wordsList = Arrays.stream(string.split(" "))
.collect(Collectors.toList());
Set<String> duplicatingStrings =
wordsList.stream().filter(i -> Collections.frequency(wordsList, i) > 1)
.collect(Collectors.toSet());
System.out.println(duplicatingStrings);
}
}
1. split() method in Java splits a string into substrings using a delimiter that is specified using a regular expression. Here delimiter is whitespace. It returns an array of String.
2. toList() returns a Collector that accumulates the input elements into a new List.
3. stream() method accepts a mandatory parameter array which is the array of whose elements are to be converted into a sequential stream and returns a Sequential Stream from the array passed as the parameter.
4. The Java stream filter() method allows us to narrow down the stream elements based on a criterion. Here we are filtering the words whose count is more than one.
5. toSet() method is used to collect a stream into a set.
Console Output:
[Java, Go, Python]
[Java, Go, Python]
Example 3. Using Google Guava MultiSet
import com.google.common.collect.HashMultiset;
import com.google.common.collect.Multiset;
public class Main {
public static void main(String[] args) {
String string = "Java Python Go C# Java Python Java Go C";
String []words = string.split(" ");
Multiset<String> frequencies = HashMultiset.create();
for (String word : words) {
frequencies.add(word);
}
for (String word : frequencies.elementSet()) {
if(frequencies.count(word)>1){
System.out.println(word);
}
}
}
}
A Multiset is an collection that is kindred to Set, but it may have duplicate elements. The duplicate elements are fortified by maintaining a count of the total number of times an element appears in the collection.
Console Output:
Java
Go
Python
Java
Go
Python
More Interesting topics,