Analyze huge set of sentences for word presence
The logic of word extraction seems convoluted. Consider two loops instead, along the lines of

    int text_length = text.length();
    int i = 0;
    while (true) {
        while ((i &lt; text_length) &amp;&amp; !isEnglishLetterOrHyphen(text.charAt(i))) {
            i++;
        }

        int wordStart = i;
        while ((i &lt; text_length) &amp;&amp; isEnglishLetterOrHyphen(text.charAt(i))) {
            i++;
        }

        if (consumer.apply(text.substring(wordStart, i))) {
            return true;
        }
    }


BTW,

    isEnglishPiece &amp;&amp; !isEnglishLetter || !isEnglishPiece &amp;&amp; isEnglishLetter


is a long (and unclear) way to say

    isEnglishPiece != isEnglishLetter