code: static String toLowerCamelCaseWithNumericSuffixes(String input) {
      // Determine where the numeric suffixes begin
      int suffixStart = input.length();
      while (suffixStart > 0) {
        char ch = '\0';
        int numberStart = suffixStart;
        while (numberStart > 0) {
          ch = input.charAt(numberStart - 1);
          if (Character.isDigit(ch)) {
            numberStart--;
          } else {
            break;
          }
        }
        if ((numberStart > 0) && (numberStart < suffixStart) && (ch == '_')) {
          suffixStart = numberStart - 1;
        } else {
          break;
        }
      }
  
      if (suffixStart == input.length()) {
        return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, input);
      } else {
        return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL,
            input.substring(0, suffixStart)) + input.substring(suffixStart);
      }
    }
docs: Converts the given string from upper-underscore case to lower-camel case,
  preserving numeric suffixes. For example: "NAME" -> "name" "A4_LETTER" ->
  "a4Letter" "START_SPAN_1_23" -> "startSpan_1_23".