StringUtils { public static <T> String join(Collection<T> collection, String separator) { return join(collection, separator, new StringFormatter<T>() { @Override public String format(T obj) { return obj.toString(); } }); }  static boolean isEmpty(String str); static boolean isContainEmpty(String... args); static boolean isBlank(String str); static String trimToNull(String str); static String trimToEmpty(String str); static String trim(String str); static boolean equals(String str1, String str2); static boolean equalsIgnoreCase(String str1, String str2); static boolean startsWith(String str, String prefix); static boolean startsWithIgnoreCase(String str, String prefix); static boolean isNumeric(String str); static String join(Collection<T> collection, String separator); static String join(Collection<T> collection, String separator,
                                StringFormatter<T> formatter); static final String EMPTY; }
@Test public void testJoin() { Assert.assertEquals("", StringUtils.join(new ArrayList(), "1a 2b 3c")); ArrayList collection = new ArrayList(); collection.add(null); Assert.assertEquals("", StringUtils.join(collection, "1a 2b 3c")); collection = new ArrayList(); collection.add(-2_147_483_648); Assert.assertEquals("-2147483648", StringUtils.join(collection, "1a 2b 3c")); }