java中如何查询一个指定的子字符在字符串中出现的所有or指定次数的下标索引

WRF-Chem新手避坑指南:从chem_opt到emiss_opt,那些手册里没明说的参数配置实战 本文为WRF-Chem新手提供从chem_opt到emiss_opt的参数配置实战指南,解析官方文档中未明确的常见陷阱与解决方案。通过华北重霾案例,详细讲解化学机制选择、排放源配置及特殊参数组合的注意事项,帮助用户避开常见错误,提升模拟效率。 阅读详情

在这里插入图片描述

前言

最近刷到一道很常见的算法题,题目不难,实现方式很多,就看时间复杂度哪种最低了。

话不多说,看题:


【问】 已知字符串str1=“ABABCDBADBCDBABCDBADBBADBBCCDBABCDBADBBCCDBADBBCCDBABCD”, str2=“ABCD”,如何快速高效的找出str2在str1中出现的所有下标索引以及第三次出现的下标索引?

博主一看:哇喔,这不是so easy 嘛??


开始操作。

1、indexof

	  public static void main(String[] args) {

        String str1 = "ABABCDBADBCDBABCDBADBBADBBCCDBABCDBADBBCCDBADBBCCDBABCD";
        String str2 = "ABCD";

        System.out.println(getIndexs(str1, str2));
        System.out.println(getIndex(str1, str2));

    }

    /**
     * 每找到一个“ABCD”,就将字符串截取,并将每次截取位置+下标累加即可
     *
     * @param str1
     * @param str2
     * @return
     */
    static List<Integer> getIndexs(String str1, String str2) {

        int length = str2.length();

        int index;
        int location = 0;
        List<Integer> indexs = new ArrayList<>();
        while (-1 != str1.indexOf(str2)) {
            index = str1.indexOf(str2);

            indexs.add(location + index);

            index = index + length;

            location = location + index;

            str1 = str1.substring(index);

        }
        return indexs;
    }

    /**
     * 每找到一个“ABCD”,就将字符串截取,直到找到第三个,将每次下标累加即可。
     *
     * @param str1
     * @param str2
     * @return
     */
    static Integer getIndex(String str1, String str2) {
        int num = 0;
        int location = 0;

        int index = str1.indexOf(str2);
        while (-1 != str1.indexOf(str2)) {
            location += index;

            num++;
            if (3 == num) {
                break;
            } else {
                str1 = str1.substring(index);
                index = str1.indexOf(str2, 1);
            }
        }

        return location;
    }

2、正则

	  public static void main(String[] args) {

        String str1 = "ABABCDBADBCDBABCDBADBBADBBCCDBABCDBADBBCCDBADBBCCDBABCD";
        String str2 = "ABCD";

        System.out.println(getIndexs(str1, str2));
        System.out.println(getIndex(str1, str2));

    }

    static List<Integer> getIndexs(String str1, String str2) {
        List<Integer> indexs = new ArrayList<>();
      
        int index;
        Pattern p = Pattern.compile(str2);
        Matcher m = p.matcher(str1);

        while (m.find()) {
            index=m.start();
            indexs.add(index);
        }

        return indexs;
    }

    
    static Integer getIndex(String str1, String str2) {
  	    int index = 0;
        int num = 0;
        Pattern p = Pattern.compile(str2);
        Matcher m = p.matcher(str1);

        while (m.find()) {
            num++;
            if (3 == num) {
                index=m.start();
            }
        }

        return index;
    }

3、split

 public static void main(String[] args) {

        String str1 = "ABABCDBADBCDBABCDBADBBADBBCCDBABCDBADBBCCDBADBBCCDBABCD";
        String str2 = "ABCD";

        System.out.println(getIndexs(str1, str2));
        System.out.println(getIndex(str1, str2));

    }

    static List<Integer> getIndexs(String str1, String str2) {
        int length = str2.length();
        String[] split = str1.split(str2);

        int index = 0;

        List<Integer> indexs = new ArrayList<>();
        for (String s : split) {

            indexs.add(index + s.length());
            index = index + s.length() + length;
        }

        return indexs;
    }

    static Integer getIndex(String str1, String str2) {
        int length = str2.length();
        String[] split = str1.split(str2);

        int index = 0;
        int num = 0;
        for (String s : split) {
			num++;
			
            index = index + s.length();

            if (num == 3) {
                break;
            }
            index = index + length;
        }

        return index;
    }

4、计算hash

public static void main(String[] args) {

        String str1 = "ABABCDBADBCDBABCDBADBBADBBCCDBABCDBADBBCCDBADBBCCDBABCD";
        String str2 = "ABCD";

        System.out.println(getIndexs(str1, str2));
        System.out.println(getIndex(str1, str2));

    }

    static List<Integer> getIndexs(String str1, String str2) {
        int length = str2.length();
        int length1 = str1.length();
        int i = str2.hashCode();

        List<Integer> indexs = new ArrayList<>();
        
        for (int i2 = 0; i2 < length1 - length + 1; i2++) {
            String substring = str1.substring(i2, i2 + length);
            int i1 = substring.hashCode();
            
            if (i == i1) {
                indexs.add(i2);
            }
        }

        return indexs;
    }

    static Integer getIndex(String str1, String str2) {

        int length = str2.length();
        int length1 = str1.length();
        int i = str2.hashCode();
        
        int index = 0;
        int num = 0;
        
        for (int i2 = 0; i2 < length1 - length + 1; i2++) {
            String substring = str1.substring(i2, i2 + length);
            int i1 = substring.hashCode();
            
            if (i == i1) {
                num++;
                
                if (num == 3) {
                    index = i2;
                    break;
                }
                
            }
        }

        return index;
    }

这几种方式的运行结果:

在这里插入图片描述
完结!

用Python turtle库 绘制皮卡丘 Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。 turtle基础知识参考: https://gitchat.blog.youkuaiyun.com/article/details/90696190 https://blog.csdn.ne... 阅读详情

相关推荐

SMETANA 安装使用教程

关于SMETANA的安装和简单使用信息

qq_44940977的博客 1167

Java学习笔记——String类

目录 一、String 的创建 二、转换 三、比较 四、查找 五、替换 六、其他 七、代码 字符串广泛应用在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。下面介绍String类的构建以及常见方法。 一、String 的创建 String s = “xxx” String("xxx") String(char数组) String(char数组,起始下标,长度) String(byte数组) String(byte数组

D77的博客 1529

NVIDIA NCCL 安装和测试实战教程

ibrary)是用于深度学习应用的高性能通信库,可加速多GPU通信和同步。它能够在多个GPU之间进行高效的数据传输和集体操作,显著提高了分布式GPU系统上深度学习训练和推理的性能。NVIDIA NCCL是加速多GPU系统上深度学习应用的必不可少的工具。其高效的通信原语和集体操作显著提高了分布式训练和推理的性能,使其成为现代深度学习基础架构的关键组成部分。

weixin_39818775的博客 4428

Java中下标和索引的区别

所以,在简单的场景下,下标和索引可以互换使用,用来表示数组或其他数据结构中的元素位置。然而,索引可以更泛化地表示元素位置,同时也可以在不同的数据结构中使用,而下标更常用于描述数组和类似数据结构中的元素索引。索引(index)则是一个更广泛的概念,可以用于描述各种数据结构中元素的位置,不仅限于数组。类似于下标,索引通常从0开始。在Java中,"下标"和"索引"这两个术语通常可以互换使用,并且它们可以用来描述数据结构中元素的位置。而索引是一个更广义的术语,可以描述各种数据结构中元素的位置,包括数组。

weixin_65162790的博客 1442

Stata实战:RCS限制立方样条非线性关系建模与P值解读全攻略

本文详细介绍了在Stata中使用RCS限制立方样条进行非线性关系建模的全过程,包括数据准备、节点设置、COX回归模型构建、结果可视化及P值解读。通过乳腺癌临床数据实例,展示了如何捕捉年龄与死亡风险之间的复杂非线性关系,并提供了实用的Stata代码和图形优化技巧。

weixin_30650039的博客 471

STM32HAL库 基于外部Flash+FatFs模拟U盘方式进行固件拷贝升级(详解)

STM32HAL库 基于外部Flash+FatFs模拟U盘方式进行固件拷贝升级

qq_36075612的博客 1万+

java中如何查询一个指定的子字符在字符串中出现的次数的下标索引

// java中如何查询一个指定的子字符在字符串中出现的次数的下标索引 // java中如何查询一个指定的子字符在字符串中出现的次数的下标索引 import java.util.ArrayList; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main{ public static void main(String[] arg..

ilovefyc的博客 514

高云FPGA系列教程(2):FPGA点灯工程创建、程序下载和固化

相比于国外FPGA厂商EDA开发环境,几个G到几十个G的大小,高云云源软件安装包也很小巧,界面也很简洁,综合速度非常快,是我没想到的,好像在使用单片机一样,点一下就编译完成了,以本文简单的LED示例工程为例,比特流文件几乎在几秒钟内生成;无论是下载比特流文件到RAM还是Flash中,速度都很快,而且只有一种fs程序文件格式,不用再进行bit/mcs转换;云源软件自带的编辑器也很好用,和Notepad++界面差不多,而且快捷键很方便,具有基本的自动补全功能。

whik1194的博客 5460

计算字符在字符串中出现的次数并记录出现的位置java

你可以使用 Java 中的 String 类的 indexOf() 方法来计算字符在字符串中出现的次数并记录出现的位置。 例如,假设你想要计算字符 'a' 在字符串 "abcabc" 中出现的次数并记录出现的位置,你可以使用以下代码: Stringstr = "abcabc"; char c = 'a'; int count = 0; int index = str.indexOf(c); whi...

weixin_35755434的博客 1472

CDMamba安装配置Windows(50系列的显卡)

本人家里的显卡是RTX3050的,运行起来非常缓慢,大家可以参考上一篇文章,以下是用RTX5080配置的CDMamba,里面有一些库没有更新,因此会比较坑爹。就是pytorch已经更新了,搭配的是cuda12.8,但是cdmamba里的mmcv只更新到cuda12.1的版本,当然很多人会说那就向下兼容,但是笔者已经尝试了,会一直提示mmcv的问题。因此,索性直接不用mmcv。

hanfeng5268的博客 686

寻路最终版哦

相信大家用unity3d寻路的时候,一定会碰到多人

yxriyin的专栏 6954

获取某个字符在字符串中的多个下标

网上大多是用for循环,或者递归indexof,这种方式感觉代码不够简洁。 可用Linq方式: var indexs = "张三,李四,王二,三三" .Select((item, index) => new { item, index }) .Where(t => t.item.Equals('三')) .Select(t => t.index) .ToList(); ...

SeedWJ的博客 1240

RT-DETR算法优化改进:DCNv4更快收敛、更高速度、更高性能,效果秒杀DCNv3、DCNv2等 ,助力检测

DCNv4更快收敛、更高速度、更高性能,完美和RT-DETR结合,助力涨点

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1322

Java查询字符、字符串出现的次数

Java中字符串中子串的查找共有四种方法,如下: int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引。 int indexOf(String str, int startIndex):从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引 int lastIndexOf(String str) :返回在此字符串中最右边出现的指定子字符串的索引。 int lastIndexOf(String str, int startIndex) :从指定的索引处

Aiydairuning的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java 获取指定字符串出现的次数

Java中 获取指定字符串在另一个字符串中出现的次数 方式一 /** * @param args */ public static void main(String[] args) { String srcText = "Hello World"; String findText = "e"; int num = appearNumber(srcText, f

itmyhome的专栏 6万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java中查询一个子字符串子父字符串中出现的所有位置

import java.util.ArrayList; import java.util.List; import com.alibaba.fastjson.JSONArray; public class Test { /** * 功能获取某一个子字符串在字符串出现的的所有索引位置 * @param str * @re...

喜羊羊love红太狼 2315

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java获取某个字符在指定字符串中出现的第N次的位置

在开发过程中我们经常会用到String的indexOf方法,这个方法是用来获取某个特定字符在指定字符串中第一次出现的位置,通常用来判断是否包含或者用来进行字符串的截取,有些时候我们不仅需要获取这个特定字符第一次出现的位置,可能还需要获取第二次、第三次甚至是第四次出现的位置。 怎么做呢? public static void main(String[] args) { //指定字符串 String str = "welcome to china"; //查找字符

sun_luming的博客 1万+

一个字符串在另一个字符串中出现的次数

获取一个字符串在另一个字符串中出现的次数。 比如:获取“ ab”在 “abkkcadkabkebfkabkskab” 中出现的次数 代码实现 public static int getTime(String s1, String s2){ int count = 0; for (int i = 0; i < s1.length(); i++){ //使用for循环逐个比较以s2开头的子字符串 if (s1.startsWith(s2.

qq_39794062的博客 2797

Java练习题之 求字符串str中,s出现的次数

Java练习题,String类常用方法,查找特定字符出现的次数:输入一个字符串,查找s出现的次数。

这介绍不了我 515

Java字符串查找

在给定的字符串中查找需要的字符或字符串是常见的操作,以下是String类中常用的查找方法。

2301_76161469的博客 2459

Java中字符串中查找所有子串的方法,并返回下标

查找所有子串

m0_61554210的博客 605

计算一个字符串中每个字符出现的次数

1、分析 2、代码实现 package Demo016; import java.util.HashMap; import java.util.Scanner; public class demo010MapTest { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入一个字符串:"); Strin

qq_45646494的博客 675

java字符串下标从几开始_Java 返回字符串中第一个不重复字符的下标 下标从0开始...

比如abcdefgabdef其中字符c和g不重复,返回c的小标,下标从0开始,那么是2package com.example.demo;import org.testng.annotations.Test;import java.util.ArrayList;import java.util.LinkedHashSet;public class Test111 {String str1 = "ab...

weixin_39738416的博客 188

Java判断一个字符串是否包含某个字符串

Java判断一个字符串是否包含某个字符串。方式一:contains()方法,方式二:startWith()方法,方式三:indexOf()方法

禾日香的博客 2万+

Java字符串调用和方法

字符串是一连串的字符。Java中将字符串作为String类型对象来处理。字符串一旦被创建,就不能改变它的值。

2302_77697276的博客 1112

java 字符串 字符查找_java之字符串中查找字串的常见方法

1、int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引。int indexOf(String str, int startIndex):从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。函数数名:indexOf调用方式:Object(String).indexOf(String str,int startIndex)或String.i...

weixin_42515448的博客 5148
上一篇: 10秒内插入亿量级数据,我滴妈,真牛逼...
下一篇: 【Caffeine进阶】Redis+Caffeine 两级缓存实战,性能爆缸
_Romeo
_Romeo 优质创作者: 后端开发技术领域 优质创作者: 后端开发技术领域
博客等级 码龄8年 2万+粉丝 104原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Romeo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值