1.概述
有很多方法可以计算Java中字符串中 char 的出现次数。
在本快速教程中,我们将重点介绍如何计算字符数的几个示例——首先使用核心 Java 库,然后使用其他库和框架,例如 Spring 和 Guava。
2.使用Core Java Lib
2.1。命令式方法
一些开发人员可能更喜欢使用核心 Java。有很多方法可以计算字符串中 char 的出现次数。
让我们从一个简单/天真的方法开始:
String someString = "elephant";char someChar = 'e';int count = 0; for (int i = 0; i < someString.length(); i++) { if (someString.charAt(i) == someChar) { count++; }}assertEquals(2, count);
毫不奇怪,这会起作用,但是有更好的方法可以做到这一点。
2.2.使用递归
一个不太明显但仍然有趣的解决方案是使用递归:
private static int countOccurences( String someString, char searchedChar, int index) { if (index >= someString.length()) { return 0; } int count = someString.charAt(index) == searchedChar ? 1 : 0; return count + countOccurences( someString, searchedChar, index + 1);}
我们可以通过以下方式调用这个递归方法:useRecursionToCountChars(“elephant”, ‘e’, 0)。
2.3.使用正则表达式
另一种方法是使用正则表达式:
Pattern pattern = Pattern.compile("[^e]*e");Matcher matcher = pattern.matcher("elephant");int count = 0;while (matcher.find()) { count++;} assertEquals(2, count);
请注意,此解决方案在技术上是正确的,但不是最佳的,因为使用非常强大的正则表达式来解决诸如查找字符串中字符出现次数这样的简单问题是多余的。
2.4.使用 Java 8 功能
Java 8 中可用的新特性在这里非常有用。
让我们使用流和 lambdas 来实现计数:
String someString = "elephant";long count = someString.chars().filter(ch -> ch == 'e').count();assertEquals(2, count);long count2 = someString.codePoints().filter(ch -> ch == 'e').count();assertEquals(2, count2);
因此,这显然是一个使用核心库的更清洁、更易读的解决方案。
3. 使用外部库
现在让我们看一些利用外部库中的实用程序的解决方案。
3.1。使用StringUtils
一般来说,使用现有的解决方案总是比发明我们自己的解决方案更好。commons.lang.StringUtils类为我们提供了countMatches()方法,该方法可用于计算给定String中的字符甚至子字符串。
首先,我们需要包含适当的依赖项:
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version></dependency>
我们可以在Maven Central上找到最新版本。
现在让我们使用countMatches()来计算“elephant”字符串文字中e字符的数量:
int count = StringUtils.countMatches("elephant", "e");assertEquals(2, count);
3.2.使用Guava
番石榴也有助于计算字符。我们需要定义依赖:
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>31.0.1-jre</version></dependency>
我们可以在Maven Central上找到最新版本。
让我们看看 Guava 如何快速帮助我们计算字符:
int count = CharMatcher.is('e').countIn("elephant");assertEquals(2, count);
3.3.使用Spring
自然,将 Spring 框架添加到我们的项目中只是为了计算字符是没有意义的。
但是,如果我们的项目中已经有了它,我们只需要使用countOccurencesOf()方法:
int count = StringUtils.countOccurrencesOf("elephant", "e");assertEquals(2, count);
4。结论
在本文中,我们重点介绍了对字符串中的字符进行计数的各种方法。其中一些是纯粹用 Java 设计的;一些需要额外的库。
我们的建议是使用来自StringUtils、 Guava 或 Spring的现有实用程序。但是,如果只首选使用纯 Java,本文提供了一些使用 Java 8 完成它的可能性。
这些示例的完整源代码可在此 GitHub 项目中找到。