code: public static Splitter on(final String separator) {
      checkArgument(separator.length() != 0, "The separator may not be the empty string.");
      if (separator.length() == 1) {
        return Splitter.on(separator.charAt(0));
      }
      return new Splitter(
          new Strategy() {
            @Override
            public SplittingIterator iterator(Splitter splitter, CharSequence toSplit) {
              return new SplittingIterator(splitter, toSplit) {
                @Override
                public int separatorStart(int start) {
                  int separatorLength = separator.length();
  
                  positions:
                  for (int p = start, last = toSplit.length() - separatorLength; p <= last; p++) {
                    for (int i = 0; i < separatorLength; i++) {
                      if (toSplit.charAt(i + p) != separator.charAt(i)) {
                        continue positions;
                      }
                    }
                    return p;
                  }
                  return -1;
                }
  
                @Override
                public int separatorEnd(int separatorPosition) {
                  return separatorPosition + separator.length();
                }
              };
            }
          });
    }
docs: Returns a splitter that uses the given fixed string as a separator. For example, {@code
  Splitter.on(", ").split("foo, bar,baz")} returns an iterable containing {@code ["foo",
  "bar,baz"]}.
  
  @param separator the literal, nonempty string to recognize as a separator
  @return a splitter, with default settings, that recognizes that separator