public static String lowerCamelToLowerUnderscore(String lowerCamel) {
    StringBuilder builder = new StringBuilder();
    int length = lowerCamel.length();

    int fromIndex = 0;

    for (int i = 0; i < length; i++) {
      char symbol = lowerCamel.charAt(i);
      if (symbol >= 'A' && symbol <= 'Z') {
        builder.append(lowerCamel, fromIndex, i).append('_').append(Character.toLowerCase(symbol));
        fromIndex = i + 1;
      }
    }

    if (fromIndex < length) {
      builder.append(lowerCamel, fromIndex, length);
    }

    return builder.toString();
  }
@Test
  public void testLowerCamelToLowerUnderscore() {
    assertEquals(StringUtils.lowerCamelToLowerUnderscore("someVariable"), "some_variable");
    assertEquals(StringUtils.lowerCamelToLowerUnderscore("someLongVariable"), "some_long_variable");
    assertEquals(StringUtils.lowerCamelToLowerUnderscore("some123variable"), "some123variable");
    assertEquals(StringUtils.lowerCamelToLowerUnderscore("someVariable123"), "some_variable123");
  }