code: private void processSplit(final String parsed_value) {
      if (splits == null) {
        // then this is the first time we're processing the value, so we need to
        // execute the split if there's a separator, after some validation
        if (parsed_value == null || parsed_value.isEmpty()) {
          throw new IllegalArgumentException("Value was empty for rule: " + 
              rule);
        }
        if (rule.getSeparator() == null || rule.getSeparator().isEmpty()) {
          throw new IllegalArgumentException("Separator was empty for rule: " + 
              rule);
        }      
        
        // split it
        splits = parsed_value.split(rule.getSeparator());
        if (splits.length < 1) { 
          testMessage("Separator did not match, created an empty list on rule: " + 
              rule);
          // set the index to 1 so the next time through it thinks we're done and
          // moves on to the next rule
          split_idx = 1;
          return;
        }
        split_idx = 0;
        setCurrentName(parsed_value, splits[split_idx]);
        split_idx++;
      } else {
        // otherwise we have split values and we just need to grab the next one
        setCurrentName(parsed_value, splits[split_idx]);
        split_idx++;
      }
    }
docs: Performs a split operation on the parsed value using the character set
  in the rule's {@code separator} field. When splitting a value, the
  {@link #splits} and {@link #split_idx} fields are used to track state and
  determine where in the split we currently are. {@link #processRuleset} will
  handle incrementing the rule index after we have finished our split. If
  the split separator character wasn't found in the parsed string, then we
  just return the entire string and move on to the next rule.
  @param parsed_value The value parsed from the calling parser method
  @throws IllegalStateException if the value was empty or the separator was
  empty