Страницы

Поиск по вопросам

понедельник, 25 марта 2019 г.

Как посчитать количество вхождений символа в строку?

Есть необходимость реализовать проверку на наличие нескольких запятых в строке. Т.е. можно использовать только одну запятую.
Но в целом достаточно узнать количество вхождений символа в строку. Остальное дописать не будет проблемой.
Какие есть способы это (посчитать количество вхождений символа) сделать?


Ответ

Регулярка Использовать StringUtils.countMatches из org.apache.commons.lang3.StringUtils
int occurrence = StringUtils.countMatches("a,b,c,d", ","); System.out.println(occurrence); Использовать string.split
String string = "a,b,c,d"; String []splitArray = string.split("\\,"); System.out.println("Запятых тут : " + (splitArray.length - 1) + " штук."); String testString = "a,b,c,d"; int occurrencesCount = testString.length() - testString.replace(",", "").length(); System.out.println(occurrencesCount); Java8
String testString = "a,b,c,d"; long occurrencesCount = testString.chars().filter(ch -> ch == ',').count(); System.out.println(occurrencesCount); Еще какой-нибудь способ

UPD нашел подобную тему на enSO: How do I count the number of occurrences of a char in a String?, несколько примеров оттуда:
Spring Framework
int spring = org.springframework.util.StringUtils.countOccurrencesOf(testString, ","); System.out.println("spring = " + spring); replaceAll
int replaceAll = testString.replaceAll("[^,]", "").length(); System.out.println("replaceAll = " + replaceAll); Java8
long java8 = testString.codePoints().filter(ch -> ch == ',').count(); System.out.println("java8 = " + java8); StringTokenizer
int stringTokenizer = new StringTokenizer(" " +testString + " ", ",").countTokens()-1; System.out.println("stringTokenizer = " + stringTokenizer);
Но в данном случае надо быть осторожным, так как, например, для строки a.b.c.d этот пример будет работать, а для строки a...b.c....d или ...a.b.c.d или a....b......c.....d... и т.д. — не будет. В итоге последовательность точек между каждой из букв посчитается лишь за один символ.

Комментариев нет:

Отправить комментарий