### Question:
Strings { public static String[] split(String regex, String target) { String r = "(?<!\\\\)" + regex; String[] splitted = target.split(r); if (Arrays.isEmpty(splitted)) return splitted; for (int i = 0; i < splitted.length; i++) { splitted[i] = splitted[i].trim().replaceAll("\\\\" + regex, regex); } return splitted; } private  Strings(); static String substitute(String string, Map<String, ? extends Object> replace); static String substitute(String string, Map<String, ? extends Object> replace, Locale locale); static String findPlaceHolder(String string); static String clearEscapedPlaceHolder(String dirty); static T proper(T returnIfNotEmpty, T alternative); static String toCamel(String snake); static String toSnake(String camel); static String join(T... joinees); static String joinBy(String separator, T... joinees); static String join(List<T> joinees); static String joinBy(String separator, List<T> joinees); static boolean isBlank(CharSequence suspect); static boolean containBlank(CharSequence suspect); static String removeBlanks(CharSequence target); static boolean isEmpty(CharSequence suspect); static boolean isEmpty(CharSequence suspect, boolean removeBlanks); static String reverse(String reversee); static String trim(String target); static String[] split(String regex, String target); static boolean equalsIgnoreCase(String source, String destination); static boolean startsWith(String text, String prefix); static boolean startsWith(String text, String prefix, boolean textCompare); static boolean endsWith(String text, String prefix); static boolean endsWith(String text, String prefix, boolean textCompare); static String escapeHTML(CharSequence html); static String escapeRegex(CharSequence text);  }### Answer:
@Test public void splitテスト() { assertThat(Strings.trim(""), is("")); final String[] seeds = { "abc,def", "abc\\,def", "abc\\\\,def" }; final String[][] expected = { {"abc", "def"}, {"abc,def"}, {"abc\\,def"} }; Arrays.each(seeds, new EachCall<String>() { public void each(String e, int i, int t) { String[] values = Strings.split(",", e); assertArrayEquals("loop: " + i, expected[i], values); } }); }
@Test public void splitテスト2() { final String[] seeds = { "abcdef", "abc\\def", "abc\\\\def" }; final String[][] expected = { {"abc", "f"}, {"abcdef"}, {"abc\\def"} }; Arrays.each(seeds, new EachCall<String>() { public void each(String e, int i, int t) { String[] values = Strings.split("de", e); assertArrayEquals("loop: " + i, expected[i], values); } }); }