code: public static void parseCacheControl(String directives, BiConsumer<String, String> callback) {
          final int len = directives.length();
          for (int i = 0; i < len;) {
              final int nameStart = i;
              final String name;
              final String value;
  
              // Find the name.
              for (; i < len; i++) {
                  final char ch = directives.charAt(i);
                  if (ch == ',' || ch == '=') {
                      break;
                  }
              }
              name = directives.substring(nameStart, i).trim();
  
              // Find the value.
              if (i == len || directives.charAt(i) == ',') {
                  // Skip comma or go beyond 'len' to break the loop.
                  i++;
                  value = null;
              } else {
                  // Skip '='.
                  i++;
  
                  // Skip whitespaces.
                  for (; i < len; i++) {
                      final char ch = directives.charAt(i);
                      if (ch != ' ' && ch != '\t') {
                          break;
                      }
                  }
  
                  if (i < len && directives.charAt(i) == '\"') {
                      // Handle quoted string.
                      // Skip the opening quote.
                      i++;
                      final int valueStart = i;
  
                      // Find the closing quote.
                      for (; i < len; i++) {
                          if (directives.charAt(i) == '\"') {
                              break;
                          }
                      }
                      value = directives.substring(valueStart, i);
  
                      // Skip the closing quote.
                      i++;
  
                      // Find the comma and skip it.
                      for (; i < len; i++) {
                          if (directives.charAt(i) == ',') {
                              i++;
                              break;
                          }
                      }
                  } else {
                      // Handle unquoted string.
                      final int valueStart = i;
  
                      // Find the comma.
                      for (; i < len; i++) {
                          if (directives.charAt(i) == ',') {
                              break;
                          }
                      }
                      value = directives.substring(valueStart, i).trim();
  
                      // Skip the comma.
                      i++;
                  }
              }
  
              if (!name.isEmpty()) {
                  callback.accept(Ascii.toLowerCase(name), Strings.emptyToNull(value));
              }
          }
      }
docs: Parses the specified {@code "cache-control"} directives and invokes the specified {@code callback}
  with the directive names and values.