code: public boolean regionMatches(boolean ignoreCase, int thisStart, CharSequence string, int start, int length) {
          if (!ignoreCase) {
              return regionMatches(thisStart, string, start, length);
          }
  
          if (string == null) {
              throw new NullPointerException("string");
          }
  
          final int thisLen = length();
          if (thisStart < 0 || length > thisLen - thisStart) {
              return false;
          }
          if (start < 0 || length > string.length() - start) {
              return false;
          }
  
          thisStart += arrayOffset();
          final int thisEnd = thisStart + length;
          while (thisStart < thisEnd) {
              if (!equalsIgnoreCase(b2c(value[thisStart++]), string.charAt(start++))) {
                  return false;
              }
          }
          return true;
      }
docs: Compares the specified string to this string and compares the specified range of characters to determine if they
  are the same. When ignoreCase is true, the case of the characters is ignored during the comparison.
  
  @param ignoreCase specifies if case should be ignored.
  @param thisStart the starting offset in this string.
  @param string the string to compare.
  @param start the starting offset in the specified string.
  @param length the number of characters to compare.
  @return {@code true} if the ranges of characters are equal, {@code false} otherwise.
  @throws NullPointerException if {@code string} is {@code null}.