// TODO: returns empty first, but not empty last static L splitAt(S s, S splitter) { new L parts; int i = 0; if (s != null) while (i < l(s)) { int j = indexOf(s, splitter, i); if (j < 0) j = l(s); parts.add(substring(s, i, j)); i = j+l(splitter); } ret parts; }