code: public static String fromCamelCaseToSnakeCase(String text) {
      if (isNullOrEmpty(text)) {
        return text;
      }
      StringBuilder result = new StringBuilder();
      CharBuffer buf = CharBuffer.wrap(text);
      while (buf.hasRemaining()) {
        char c = buf.get();
        result.append(Character.toLowerCase(c));
        buf.mark();
        if (buf.hasRemaining()) {
          char c2 = buf.get();
          if (Character.isLowerCase(c) && Character.isUpperCase(c2)) {
            result.append("_");
          }
          buf.reset();
        }
      }
      return result.toString();
    }
docs: キャメルケースをアンダースコア区切りの大文字に変換します。
  
  @param text 文字列
  @return 変換された文字列。 ただし、{@code text} が {@code null} の場合は {@code null}、 {@code text}
  が空文字の場合は空文字を返します。