#java #строки
Есть необходимость реализовать проверку на наличие нескольких запятых в строке. Т.е. можно использовать только одну запятую. Но в целом достаточно узнать количество вхождений символа в строку. Остальное дописать не будет проблемой. Какие есть способы это (посчитать количество вхождений символа) сделать?
Ответы
Ответ 1
Регулярка Использовать 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... и т.д. — не будет. В итоге последовательность точек между каждой из букв посчитается лишь за один символ.Ответ 2
Если вопрос только в том, чтобы узнать больше ли одной запятой, то самый простой вариант такой: String testString = "a,b,c,d"; boolean isMoreThanOne = testString.indexOf(',') != testString.lastIndexOf(','); System.out.println("More than one: " + isMoreThanOne);
Комментариев нет:
Отправить комментарий