code: protected static List<Token> tokenize(String requirement, Semver.SemverType type) {
          Map<Character, Token> specialChars = SPECIAL_CHARS.get(type);
  
          // Replace the tokens made of 2 chars
          if (type == Semver.SemverType.COCOAPODS) {
              requirement = requirement.replace("~>", "~");
          } else if (type == Semver.SemverType.NPM) {
              requirement = requirement.replace("||", "|");
          }
          requirement = requirement.replace("<=", "≤").replace(">=", "≥");
  
  
          LinkedList<Token> tokens = new LinkedList<Token>();
          Token previousToken = null;
  
          char[] chars = requirement.toCharArray();
          Token token = null;
          for (char c : chars) {
              if (c == ' ') continue;
  
              if (specialChars.containsKey(c)) {
                  if (token != null) {
                      tokens.add(token);
                      previousToken = token;
                      token = null;
                  }
  
                  Token current = specialChars.get(c);
                  if (current.type.isUnary() && previousToken != null && previousToken.type == TokenType.VERSION) {
                      // Handling the ranges like "≥1.2.3 <4.5.6" by inserting a "AND" binary operator
                      tokens.add(new Token(TokenType.AND));
                  }
  
                  tokens.add(current);
                  previousToken = current;
              } else {
                  if (token == null) {
                      token = new Token(TokenType.VERSION);
                  }
                  token.append(c);
              }
          }
  
          if (token != null) {
              tokens.add(token);
          }
  
          return tokens;
      }
docs: Takes a NPM requirement string and creates a list of tokens by performing 3 operations:
  - If the token is a version, it will add the version string
  - If the token is an operator, it will add the operator
  - It will insert missing "AND" operators for ranges
  
  @param requirement the requirement string
  
  @return the list of tokens