code: public static String toTitleCase(ULocale locale, String str,
              BreakIterator titleIter, int options) {
          if(titleIter == null) {
              if (locale == null) {
                  locale = ULocale.getDefault();
              }
              titleIter = BreakIterator.getWordInstance(locale);
          }
          titleIter.setText(str);
          return toTitleCase(getCaseLocale(locale), options, titleIter, str);
      }
docs: <p>Returns the titlecase version of the argument string.
  <p>Position for titlecasing is determined by the argument break
  iterator, hence the user can customize his break iterator for
  a specialized titlecasing. In this case only the forward iteration
  needs to be implemented.
  If the break iterator passed in is null, the default Unicode algorithm
  will be used to determine the titlecase positions.
  
  <p>Only positions returned by the break iterator will be title cased,
  character in between the positions will all be in lower case.
  <p>Casing is dependent on the argument locale and context-sensitive
  @param locale which string is to be converted in
  @param str source string to be performed on
  @param titleIter break iterator to determine the positions in which
  the character should be title cased.
  @param options bit set to modify the titlecasing operation
  @return lowercase version of the argument string
  @see #TITLECASE_NO_LOWERCASE
  @see #TITLECASE_NO_BREAK_ADJUSTMENT