java如何统计字符串出现的次数和次数

Java如何统计字符串出现的次数

在Java中,我们可以使用以下几种方法来统计字符串出现的次数:

1、使用for循环遍历字符串,逐个字符进行比较。

java如何统计字符串出现的次数和次数

2、使用Java内置的String类中的indexOf()lastIndexOf()方法。

3、使用正则表达式匹配子串。

4、使用Java集合框架中的HashMapHashSet

5、使用第三方库,如Apache Commons Lang中的StringUtils类。

java如何统计字符串出现的次数和次数

下面我们详细介绍这几种方法的实现原理和代码示例:

方法1:使用for循环遍历字符串,逐个字符进行比较

这种方法的基本思路是遍历字符串的每个字符,然后与目标字符串进行比较,如果找到相同的字符,就将计数器加1,最后返回计数器的值作为结果。

public static int countOccurrences(String str, String target) {
    int count = 0;
    for (int i = 0; i < str.length(); i++) {
        if (str.substring(i).startsWith(target)) {
            count++;
        }
    }
    return count;
}

方法2:使用Java内置的String类中的indexOf()lastIndexOf()方法

这种方法的基本思路是先找到目标字符串在原字符串中第一次出现的位置,然后从这个位置开始向后查找,直到找不到为止,每次找到一个目标字符串,就将计数器加1,最后返回计数器的值作为结果。

public static int countOccurrences(String str, String target) {
    int count = 0;
    int index = str.indexOf(target);
    while (index != -1) {
        count++;
        index = str.indexOf(target, index + 1);
    }
    return count;
}

方法3:使用正则表达式匹配子串

这种方法的基本思路是使用正则表达式来匹配目标字符串在原字符串中的所有子串,然后将匹配到的子串的数量作为结果返回,需要注意的是,这种方法可能会受到正则表达式的限制,例如不能处理包含特殊字符的字符串等。

java如何统计字符串出现的次数和次数

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public static int countOccurrences(String str, String target) {
    int count = 0;
    Pattern pattern = Pattern.compile(target);
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
        count++;
    }
    return count;
}

方法4:使用Java集合框架中的HashMapHashSet

这种方法的基本思路是将原字符串转换为一个字符数组,然后遍历这个数组,将每个字符作为键存储在一个HashMapHashSet中,每次遇到目标字符串的第一个字符时,就将其后面的所有字符添加到对应的集合中,最后返回集合的大小作为结果,这种方法的时间复杂度较高,但空间复杂度较低。

```javaimport java.util.HashMap;import java.util.HashSet;public static int countOccurrences(String str, String target) { int count = 0; HashMap<Character, HashSet<Integer>> map = new HashMap<>(); int[] charArray = str.toCharArray(); for (int i = 0; i < charArray.length; i++) { char key = charArray[i]; if (!map.containsKey(key)) { map.put(key, new HashSet<>()); } map.get(key).add(i); } for (HashSet<Integer> set : map.values()) { if (set.contains(charArray.length)) { count += set.size() * (set.size() + 1) / 2; } } return count; }

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/160859.html

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seo的头像K-seoSEO优化员
Previous 2023-12-24 02:36
Next 2023-12-24 02:39

相关推荐

  • java如何修改文本文件内容格式

    您可以使用Java的File类和BufferedWriter类来修改txt文本内容。 File类用于创建和操作文件,BufferedWriter类用于写入文件。 以下是一个示例代码:,,``java,import java.io.*;,,public class ReadWriteFile {, public static void main(String[] args) throws IOException {, // 指定文件路径和名称, String filePath = "test.txt";, // 创建File对象, File file = new File(filePath);, // 如果文件不存在则创建新文件, if (!file.exists()) {, file.createNewFile();, }, // 创建BufferedReader对象, BufferedReader reader = new BufferedReader(new FileReader(file));, // 创建BufferedWriter对象, BufferedWriter writer = new BufferedWriter(new FileWriter(file));, // 读取文件内容并写入新的内容, String line;, while ((line = reader.readLine()) != null) {, writer.write("This is a new content: " + line);, writer.newLine();, }, // 关闭流, reader.close();, writer.close();, },},``

    2024-01-06
    0171
  • c++stringstream的用法

    在C++中,std::stringstream(通常简写为ss)是一个流类,它允许你像处理文件或控制台输入/输出那样处理字符串。stringstream是&lt;sstream&gt;头文件中定义的,它是std::istream和std::ostream的子类,因此可以用于读取和写入字符串。创建和使用 std::str……

    2024-02-07
    0135
  • java中print函数

    print函数是Java中用于向控制台输出信息的函数,它是System.out对象的一个成员方法,print函数可以接受不同类型的参数,如整数、浮点数、字符串等,并将这些参数按照指定的格式输出到控制台,使用print函数时,需要注意参数之间的分隔符以及换行符的使用,1、基本用法

    2023-12-18
    0138
  • c语言strlen函数的用法是什么

    strlen函数简介strlen函数是C语言中用于计算字符串长度的函数,它的原型定义在&lt;string.h&gt;头文件中,strlen函数接收一个以'\0'结尾的字符数组(即字符串)作为参数,返回该字符串的长度(不包括'\0'),如果传入的参数为NULL,则返回0,strlen函数的使用非常简单,只需要将需要计算……

    2024-01-31
    0221
  • .html分享

    HTML怎么做分享按钮功能在HTML中,我们可以使用&lt;a&gt;标签和target=&quot;_blank&quot;属性来创建一个简单的分享按钮,以下是一个示例:&lt;!DOCTYPE html&gt;&lt;html lang=&quot;en&qu……

    2024-02-16
    0124
  • string与stringbuilder两者的区别

    String和StringBuilder都是Java中的字符串类,但是它们之间有一些区别。String是不可变的,一旦创建就不能被修改。而StringBuilder和StringBuffer是可变的,可以进行插入、删除和替换等操作 。

    2024-01-05
    0198

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入