अन्य उत्तर को संक्षेप में बताएं और एक लाइनर का उपयोग करके इसे करने के सभी तरीके जानते हैं:
String testString = "a.b.c.d";
1) अपाचे कॉमन्स का उपयोग करना
int apache = StringUtils.countMatches(testString, ".");
System.out.println("apache = " + apache);
2) स्प्रिंग फ्रेमवर्क का उपयोग करना
int spring = org.springframework.util.StringUtils.countOccurrencesOf(testString, ".");
System.out.println("spring = " + spring);
3) प्रतिस्थापित का उपयोग करना
int replace = testString.length() - testString.replace(".", "").length();
System.out.println("replace = " + replace);
4) प्रतिस्थापन का उपयोग करना (केस 1)
int replaceAll = testString.replaceAll("[^.]", "").length();
System.out.println("replaceAll = " + replaceAll);
5) प्रतिस्थापन का उपयोग करना (केस 2)
int replaceAllCase2 = testString.length() - testString.replaceAll("\\.", "").length();
System.out.println("replaceAll (second case) = " + replaceAllCase2);
6) विभाजन का उपयोग करना
int split = testString.split("\\.",-1).length-1;
System.out.println("split = " + split);
7) Java8 (केस 1) का उपयोग करना
long java8 = testString.chars().filter(ch -> ch =='.').count();
System.out.println("java8 = " + java8);
8) Java8 (केस 2 ) का उपयोग करना , केस 1 की तुलना में यूनिकोड के लिए बेहतर हो सकता है
long java8Case2 = testString.codePoints().filter(ch -> ch =='.').count();
System.out.println("java8 (second case) = " + java8Case2);
9) StringTokenizer का उपयोग करना
int stringTokenizer = new StringTokenizer(" " +testString + " ", ".").countTokens()-1;
System.out.println("stringTokenizer = " + stringTokenizer);
टिप्पणी से : StringTokenizer के लिए केयरफुल रहें, abcd के लिए यह काम करेगा लेकिन a ... bc ... d या ... abcd या के लिए .... b ...... c ..... d ... या आदि यह काम नहीं करेगा। बस इसके लिए गिनती होगी। पात्रों के बीच सिर्फ एक बार
अधिक जानकारी github में
परफॉमेंस टेस्ट ( JMH , मोड = एवरटाइम का उपयोग करके , 0.010
फिर बेहतर स्कोर 0.351
):
Benchmark Mode Cnt Score Error Units
1. countMatches avgt 5 0.010 ± 0.001 us/op
2. countOccurrencesOf avgt 5 0.010 ± 0.001 us/op
3. stringTokenizer avgt 5 0.028 ± 0.002 us/op
4. java8_1 avgt 5 0.077 ± 0.005 us/op
5. java8_2 avgt 5 0.078 ± 0.003 us/op
6. split avgt 5 0.137 ± 0.009 us/op
7. replaceAll_2 avgt 5 0.302 ± 0.047 us/op
8. replace avgt 5 0.303 ± 0.034 us/op
9. replaceAll_1 avgt 5 0.351 ± 0.045 us/op