@Nonnull
	public static List<String> fastSplit(@Nonnull String input, boolean includeEmpty, char split) {
		StringBuilder sb = new StringBuilder();
		ArrayList<String> words = new ArrayList<>();
		words.ensureCapacity(input.length() / 5);
		char[] strArray = input.toCharArray();
		for (char c : strArray) {
			if (c == split) {
				if ((includeEmpty || !sb.isEmpty())) words.add(sb.toString());
				sb.setLength(0);
			} else {
				sb.append(c);
			}
		}
		if ((includeEmpty || !sb.isEmpty())) words.add(sb.toString());
		return words;
	}
@Test
	void testFastSplit() {
		// Empty discarded
		assertEquals(List.of("a", "b", "c", "d"), StringUtil.fastSplit("a/b/c/d", false, '/'));
		assertEquals(List.of("a", "b", "c"), StringUtil.fastSplit("a/b/c/", false, '/'));
		assertEquals(List.of("b", "c", "d"), StringUtil.fastSplit("/b/c/d", false, '/'));
		assertEquals(Collections.emptyList(), StringUtil.fastSplit("/", false, '/'));
		assertEquals(Collections.emptyList(), StringUtil.fastSplit("//", false, '/'));
		assertEquals(Collections.emptyList(), StringUtil.fastSplit("///", false, '/'));

		// Empty included
		assertEquals(List.of("a", "b", "c", ""), StringUtil.fastSplit("a/b/c/", true, '/'));
		assertEquals(List.of("", "b", "c", "d"), StringUtil.fastSplit("/b/c/d", true, '/'));
		assertEquals(List.of("", ""), StringUtil.fastSplit("/", true, '/'));
		assertEquals(List.of("", "", ""), StringUtil.fastSplit("//", true, '/'));
		assertEquals(List.of("", "", "", ""), StringUtil.fastSplit("///", true, '/'));
	}