code: public AddressTemplate replaceWildcards(String wildcard, String... wildcards) {
          List<String> allWildcards = new ArrayList<>();
          allWildcards.add(wildcard);
          if (wildcards != null) {
              allWildcards.addAll(Arrays.asList(wildcards));
          }
  
          LinkedList<Token> replacedTokens = new LinkedList<>();
          Iterator<String> wi = allWildcards.iterator();
          for (Token token : tokens) {
              if (wi.hasNext() && token.hasKey() && "*".equals(token.getValue())) {
                  replacedTokens.add(new Token(token.getKey(), wi.next()));
              } else {
                  replacedTokens.add(new Token(token.key, token.value));
              }
          }
          return AddressTemplate.of(join(this.optional, replacedTokens));
      }
docs: Replaces one or more wildcards with the specified values starting from left to right and returns a new
  address template.
  <p/>
  This method does <em>not</em> resolve the address template. The returned template is still unresolved.
  
  @param wildcard  the first wildcard (mandatory)
  @param wildcards more wildcards (optional)
  @return a new (still unresolved) address template with the wildcards replaced by the specified values.