code: public static String unCamel(String str, char seperator, boolean lowercase) {
      char[] ca = str.toCharArray();
      if (3 > ca.length) { return lowercase ? str.toLowerCase() : str; }
      // about five seperator
      StringBuilder build = new StringBuilder(ca.length + 5);
      build.append(lowercase ? toLowerCase(ca[0]) : ca[0]);
  
      boolean lower1 = isLowerCase(ca[0]);
      int i = 1;
      while (i < ca.length - 1) {
        char cur = ca[i];
        char next = ca[i + 1];
        boolean upper2 = isUpperCase(cur);
        boolean lower3 = isLowerCase(next);
        if (lower1 && upper2 && lower3) {
          build.append(seperator);
          build.append(lowercase ? toLowerCase(cur) : cur);
          build.append(next);
          i += 2;
        } else {
          if (lowercase && upper2) {
            build.append(toLowerCase(cur));
          } else {
            build.append(cur);
          }
          lower1 = !upper2;
          i++;
        }
      }
      if (i == ca.length - 1) {
        build.append(lowercase ? toLowerCase(ca[i]) : ca[i]);
      }
      return build.toString();
    }
docs: 将驼峰表示法转换为下划线小写表示
  
  @param str
  a {@link java.lang.String} object.
  @param seperator
  a char.
  @param lowercase
  a boolean.
  @return a {@link java.lang.String} object.