Есть необходимость реализовать проверку на наличие нескольких запятых в строке. Т.е. можно использовать только одну запятую.
Но в целом достаточно узнать количество вхождений символа в строку. Остальное дописать не будет проблемой.
Какие есть способы это (посчитать количество вхождений символа) сделать?
Ответ
Регулярка
Использовать 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... и т.д. — не будет. В итоге последовательность точек между каждой из букв посчитается лишь за один символ.
Комментариев нет:
Отправить комментарий