StringUtils { public static int countMatches(final String str, final char ch) { if (isEmpty(str)) { return 0; } int count = 0; for (int i = 0; i < str.length(); i++) { if (ch == str.charAt(i)) { count++; } } return count; }  static boolean isEmpty(final CharSequence str); static int length(final CharSequence str); static boolean hasLength(final CharSequence str); static boolean hasText(final CharSequence str); static String nvl(final String... strs); static List<String> split(final String string, final String delimiter); static String split(final String string, final String delimiter, final int index); static String ltrim(final String str); static String rtrim(final String str); static String trim(final String str); static String join(final Iterable<?> values, final String token); static String join(final Object[] values, final String token); static String multiply(final String word, final int repeat); static void multiply(final StringBuilder buffer, final String word, final int repeat); static String repeat(final String word, final int repeat); static String uncapitalize(final String str); static int countMatches(final String str, final char ch); static String removePrefix(final String str, String prefix); static String removeSuffix(final String str, String suffix); static final String NULL_STRING; static final String EMPTY_STRING; }
@Test public void testCountMatches() { final Object[][] testParameters = new Object[][] {{"hello, world", 'h', 1}, {"hello, world", 'o', 2}, {"hello, world", 'l', 3}}; assertEquals(0, StringUtils.countMatches(null, 'a')); assertEquals(0, StringUtils.countMatches("", 'a')); assertEquals(0, StringUtils.countMatches(" ", 'a')); assertEquals(0, StringUtils.countMatches("\n", 'a')); for (final Object[] testParameter : testParameters) { int expected = (Integer) testParameter[2]; String str = (String) testParameter[0]; char ch = (Character) testParameter[1]; assertEquals(expected, StringUtils.countMatches(str, ch)); } }