Search code examples
javaarraysstringcharcontains

How to compare two char arrays comparing characters in the same chronology but given an extra sign which stands for every possible sign?


char [] text = {'H','e','l','L','o','H','e','l','L','o'};
char[] pat = {'H','e','?','l','o'}; //'?' stands for every possible sign

We can ignore if the letters are upper or lower case. Now I need to output how often it occurs.

Output:  He?lo is in HelLoHelLo 2x

I know that you can use string methods like "contain" but how can I consider the question mark ?


Solution

  • public int matchCount(char[] text, char[] pattern) {
        int consecCharHits = 0, matchCount = 0;
    
        for (int i = 0; i < text.length; i++) {
            if (text[i] == pattern[consecCharHits] || '?' == pattern[consecCharHits]) { // if char matches
                consecCharHits++;
                if (consecCharHits == pattern.length) { // if the whole pattern matches
                    matchCount++;
                    i -= consecCharHits - 1; // return to the next position to be evaluated
                    consecCharHits = 0; // reset consecutive char hits
                }
            } else {
                i -= consecCharHits;
                consecCharHits = 0;
            }
        }
        return matchCount;
    }