code: public static List<String> split(String string, char... separators)
    {
      if(string == null) {
        return null;
      }
  
      class ItemsList
      {
        List<String> list = new ArrayList<String>();
  
        void add(StringBuilder wordBuilder)
        {
          String value = wordBuilder.toString().trim();
          if(!value.isEmpty()) {
            list.add(value);
          }
        }
      }
  
      ItemsList itemsList = new ItemsList();
      StringBuilder itemBuilder = new StringBuilder();
  
      for(int i = 0; i < string.length(); ++i) {
        char c = string.charAt(i);
        // append to on building item all characters that are not separators
        if(!isSeparator(c, separators)) {
          itemBuilder.append(c);
        }
        // if separator found add item to list and reset builder
        if(itemBuilder.length() > 0) {
          if(isSeparator(c, separators)) {
            itemsList.add(itemBuilder);
            itemBuilder.setLength(0);
          }
        }
      }
  
      itemsList.add(itemBuilder);
      return itemsList.list;
    }
docs: Splits string into not empty, trimmed items, using specified separator(s) or space if no separator provided. Please
  note that returned list does not contain empty items and that all items are trimmed using standard
  {@link String#trim()}.
  <p>
  Returns null if string argument is null and empty list if is empty. This method supports a variable number of
  separator characters - as accepted by {@link #isSeparator(char, char...)} predicate; if none given uses space.
  
  @param string source string,
  @param separators variable number of characters used as separators.
  @return strings list, possible empty.