code: public static final String foldCase(String str, int options) {
          if (str.length() <= 100) {
              if (str.isEmpty()) {
                  return str;
              }
              // Collect and apply only changes.
              // Good if no or few changes. Bad (slow) if many changes.
              Edits edits = new Edits();
              StringBuilder replacementChars = CaseMapImpl.fold(
                      options | CaseMapImpl.OMIT_UNCHANGED_TEXT, str, new StringBuilder(), edits);
              return applyEdits(str, replacementChars, edits);
          } else {
              return CaseMapImpl.fold(options, str, new StringBuilder(str.length()), null).toString();
          }
      }
docs: <strong>[icu]</strong> The given string is mapped to its case folding equivalent according to
  UnicodeData.txt and CaseFolding.txt; if any character has no case
  folding equivalent, the character itself is returned.
  "Full", multiple-code point case folding mappings are returned here.
  For "simple" single-code point mappings use the API
  foldCase(int ch, boolean defaultmapping).
  @param str the String to be converted
  @param options A bit set for special processing. Currently the recognised options
  are FOLD_CASE_EXCLUDE_SPECIAL_I and FOLD_CASE_DEFAULT
  @return the case folding equivalent of the character, if any; otherwise the
  character itself.
  @see #foldCase(int, boolean)