class NumberGrouping {

  private static final String UNDERSCORE_SEPARATOR = "_";
  private static Pattern hexGroupPattern = Pattern.compile("([0-9|A-Z]{4})");
  private static Pattern binaryGroupPattern = Pattern.compile("([0-1]{8})");

  static String toHexLiteral(String value) {
    return value.length() > 4 ? toHexLiteral(hexGroupPattern, value) : value;
  }

  static String toBinaryLiteral(String value) {
    return toHexLiteral(binaryGroupPattern, value);
  }

  private static String toHexLiteral(Pattern pattern, String value) {<FILL_FUNCTION_BODY>}

  private static boolean notEmpty(StringBuilder sb) {
    return sb.length() != 0;
  }

  private NumberGrouping() {}

}


    Matcher matcher = pattern.matcher(value);
    StringBuilder literalBuilder = new StringBuilder();
    while (matcher.find()) {
      String byteGroup = matcher.group(1);
      if (notEmpty(literalBuilder)) {
        literalBuilder.append(UNDERSCORE_SEPARATOR);
      }
      literalBuilder.append(byteGroup);
    }

    return literalBuilder.toString();
  
<no_super_class>