如何计算字符串中字符出现的次数?
如何在字符串中计算字符出现的次数?
有多种方法可以实现这个功能,下面是一种简洁的方法:
String testString = "a.b.c.d"; int count = testString.length() - testString.replace(".", "").length(); System.out.println("count = " + count);
这种方法使用了replace()方法,将所有的"."替换为空字符串,然后通过计算字符串长度的差值来得到字符出现的次数。
除了这种方法外,还有其他一行代码的解决方案:
1) 使用Apache Commons库的StringUtils.countMatches()方法
int count = StringUtils.countMatches(testString, "."); System.out.println("count = " + count);
2) 使用Spring Framework库的StringUtils.countOccurrencesOf()方法
int count = org.springframework.util.StringUtils.countOccurrencesOf(testString, "."); System.out.println("count = " + count);
3) 使用replaceAll()方法
int count = testString.length() - testString.replaceAll("\\.", "").length(); System.out.println("count = " + count);
4) 使用split()方法
int count = testString.split("\\.",-1).length-1; System.out.println("count = " + count);
5) 使用Java8的流式操作
long count = testString.chars().filter(ch -> ch == '.').count(); System.out.println("count = " + count);
6) 使用StringTokenizer类
int count = new StringTokenizer(" " + testString + " ", ".").countTokens() - 1; System.out.println("count = " + count);
需要注意的是,StringTokenizer方法只会计算字符之间的"."出现的次数,不会计算连续出现的情况。
根据性能测试结果,使用replace()方法是最快的解决方案。
希望这些方法能够帮助你解决问题!
文章标题:如何在字符串中计算一个字符的出现次数?
在编程中,有时需要计算一个字符在一个字符串中出现的次数。下面是一些解决这个问题的方法:
方法一:使用Apache Commons Lang库中的StringUtils类的countMatches方法:
int count = StringUtils.countMatches("a.b.c.d", ".");
方法二:使用Spring Framework中的StringUtils类的countOccurrencesOf方法:
int occurance = StringUtils.countOccurrencesOf("a.b.c.d", ".");
方法三:使用Guava库中的CharMatcher类的countIn方法:
int count = CharMatcher.is('.').countIn("a.b.c.d");
需要注意的是,这些方法都需要导入相应的第三方库。如果你不想使用第三方库,可以参考这个答案中提供的一个纯Java解决方案:
[stackoverflow.com/questions/3763970/…](https://stackoverflow.com/questions/3763970)
本文介绍了三种解决在字符串中计算一个字符的出现次数的方法。第一种方法使用了Apache Commons Lang库中的StringUtils类的countMatches方法,第二种方法使用了Spring Framework中的StringUtils类的countOccurrencesOf方法,第三种方法使用了Guava库中的CharMatcher类的countIn方法。如果不想使用第三方库,可以参考提供的纯Java解决方案。无论选择哪种方法,都可以很方便地计算出一个字符在字符串中出现的次数。
问题的出现原因:用户想知道如何在一个字符串中计算一个字符出现的次数。
解决方法:使用下面的代码可以计算一个字符在字符串中出现的次数。
int count = line.length() - line.replace(".", "").length();
这个方法不使用正则表达式,所以比其他解决方案更快,并且不使用循环。这是最简单和聪明的方法,而且在Android上也适用,因为它不需要导入其他库。尽管这种方法必须为返回的字符串分配一些内存,所以不一定比其他解决方案(如`StringUtils.countMatches`)更快,但在性能不是关键因素时,这仍然是一个不错的解决方案。有些人认为这种方法的代码很丑陋,但可以通过将它放在自己的"StringUtils"类中作为一个方法来减少代码的丑陋程度。此方法需要遍历字符串三次:首先计算长度,然后替换要计数的字符(这也涉及创建一个新的字符串),最后再次计算长度。如果字符串比"."更长,那么需要将计数除以字符串的长度来得到正确的计数。有人问为什么不使用循环,但这是一个问题,不是给Andreas提问,而是给原问题提问者。
还有一个用户提到了`String.replace(String, String)`是否使用正则表达式以及为什么替换会产生一个空字符串的问题。实际上,`String.replace`不使用正则表达式,而是使用字符串的字面值进行替换。还有用户提到了使用循环的方法比这种方法快得多,尤其是在计数字符而不是字符串时(因为没有`String.replace(char, char)`方法)。另一个用户提供了一个可以计算整个字符串或一个字符出现次数的有趣变体的代码。还有用户提到Java的`String`不是以空字符结尾,也不需要通过循环来确定其长度,而是在内部使用字符数组。最后,有一个用户指出了代码中的一个错误,即在计算计数时应该将字符串"."的长度参数化。
这个问题的解决方法是使用`String.replace`方法来计算一个字符在字符串中出现的次数。这种方法不使用正则表达式,所以比其他解决方案更快,并且不需要循环。但需要注意的是,如果字符串比要计数的字符更长,需要将计数除以字符的长度来得到正确的计数。此外,还可以使用循环来实现计数,这在性能要求较高时是一个更好的选择。