docs: public static Iterator<String> parseDelimitedSegments(String str) { 
  		List<List<String>> parts = null;
  		int lastSegmentStartIndex = 0;
  		int lastPartIndex = 0;
  		int lastDelimiterIndex = 0;
  		boolean anyDelimited = false;
  		List<String> delimitedList = null;
  		for(int i = 0; i < str.length(); i++) {
  			char c = str.charAt(i);
  			if(isDelimitedBoundary(c)) {
  				if(delimitedList != null) {
  					if(parts == null) {
  						parts = new ArrayList<List<String>>(8);
  					}
  					addParts(str, parts, lastSegmentStartIndex, lastPartIndex, lastDelimiterIndex, delimitedList, i);
  					lastPartIndex = i;
  					delimitedList = null;
  				}
  				lastSegmentStartIndex = lastDelimiterIndex = i + 1; 
  			} else if(c == SEGMENT_VALUE_DELIMITER) {
  				anyDelimited = true;
  				if(delimitedList == null) {
  					delimitedList = new ArrayList<String>();
  				}
  				String sub = str.substring(lastDelimiterIndex, i);
  				delimitedList.add(sub);
  				lastDelimiterIndex = i + 1;
  			}
  		}
  		if(anyDelimited) {
  			if(delimitedList != null) {
  				if(parts == null) {
  					parts = new ArrayList<List<String>>(8);
  				}
  				addParts(str, parts, lastSegmentStartIndex, lastPartIndex, lastDelimiterIndex, delimitedList, str.length());
  			} else {
  				parts.add(Arrays.asList(new String[] {str.substring(lastPartIndex, str.length())}));
  			}
  			return iterator(parts);
  		}
  		return new Iterator<String>() {
  			boolean done;
  			
  			@Override
  			public boolean hasNext() {
  				return !done;
  			}
  
  		    @Override
  			public String next() {
  		    	if(done) {
  		    		throw new NoSuchElementException();
  		    	}
  		    	done = true;
  		    	return str;
  		    }
  
  		    @Override
  			public void remove() {
  		    	throw new UnsupportedOperationException();
  		    }
  		};
  	}