Java Regex 2 - Duplicate Words

  • + 0 comments

    import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern;

    public class DuplicateWords {

    public static void main(String[] args) {
    
        // 1. RegEx to match repeated words: 
        // \b(\w+) matches a word, (?:\s+\1\b)+ matches one or more repetitions
        String regex = "\\b(\\w+)(?:\\s+\\1\\b)+";
    
        // 2. Complete the compile argument with the case-insensitive flag
        Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
    
        Scanner in = new Scanner(System.in);
        int numSentences = Integer.parseInt(in.nextLine());
    
        while (numSentences-- > 0) {
            String input = in.nextLine();
    
            Matcher m = p.matcher(input);
    
            // Check for subsequences of input that match the compiled pattern
            while (m.find()) {
                // 3. Use m.group() to find the full duplicate chain 
                // and replace it with the first captured group: m.group(1)
                input = input.replaceAll(m.group(), m.group(1));
            }
    
            // Prints the modified sentence.
            System.out.println(input);
        }
    
        in.close();
    }
    

    }