code: 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
      }
docs: 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