private final int internalNext(int n) {
        if (n == BreakIterator.DONE || // at end or
                backwardsTrie == null) { // .. no backwards table loaded == no exceptions
            return n;
        }
        resetState();

        final int textLen = text.getLength();

        while (n != BreakIterator.DONE && n != textLen) {
            // outer loop runs once per underlying break (from fDelegate).
            // loops while 'n' points to an exception.

            if (breakExceptionAt(n)) {
                // n points to a break exception
                n = delegate.next();
            } else {
                // no exception at this spot
                return n;
            }
        }
        return n; //hit underlying DONE or break at end of text
    }
private final int internalNext ( int n ) { if ( n == BreakIterator . DONE || backwardsTrie == null ) { return n ; } resetState ( ) ; final int textLen = text . getLength ( ) ; while ( n != BreakIterator . DONE && n != textLen ) { if ( breakExceptionAt ( n ) ) { n = delegate . next ( ) ; } else { return n ; } } return n ; }
Given that the delegate has already given its "initial" answer,
find the NEXT actual (non-suppressed) break.
@param n initial position from delegate
@return new break position or BreakIterator.DONE