java 11-8 在大串中查找小串的案例

1、统计大串中小串出现的次数
  举例:
    在字符串"woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun"
  结果:
    java出现了5次
  分析:
    1、首先已经知道字符串
      A:定义一个统计变量=0;
      B:在大串中查找小串是否存在,用 int indexOf(String str):返回指定字符在此字符串中第一次出现处的索引。
          a:如果返回的索引值是-1,则说明 大串中并不存在这个小串,输出统计变量
          b:返回的若不是-1,则是这个小串的第一个字符在大串中的索引,这个时候统计变量++
      C:从得到的索引开始,再加上小串的长度,到字符串的最后,开始截取一个新的字符串,再把这个字符串赋值给大串,替换之前的大串
        String substring(int start):从指定位置开始截取字符串,默认到末尾。
      D:再次从B开始循环,直到得到的新字符串没有了这个小串,也就是B中的a
  以上分析定义为一个方法,方法的两个要素:
      a:返回值:int
      b:参数列表:两个字符串,大串和小串

 1 public class StringTest3 {
 2
 3 public static void main(String[] args) {
 4 //定义已知大串和小串
 5 String maxstring = "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun";
 6 String minstring = "java";
 7
 8 //调用getcount方法
 9 int count = getcount(maxstring,minstring);
10 System.out.println("java在这个大串中出现了"+count+"次");
11 }
12
13 //定义这个方法
14 public static int getcount(String max,String min){
15 //定义一个统计变量
16 int count = 0 ;
17
18 //在大串中查找小串是否存在,用 int indexOf(String str):返回指定字符在此字符串中第一次出现处的索引。
19 int index = max.indexOf(min);
20
21 //进行索引的判断
22 while(index != -1){
23 //统计变量自增
24 count ++;
25
26 //从得到的索引开始,再加上小串的长度,到字符串的最后,开始截取一个新的字符串,再把这个字符串赋值给大串,替换之前的大串
27 // String substring(int start):从指定位置开始截取字符串,默认到末尾。
28
29 max = max.substring(index+min.length());
30
31 index = max.indexOf(min);//再次在大串中查找小串是否存在
32 }
33 return count;
34
35 }
36
37 }

2、优化版 统计大串中小串出现的次数
    需求:首先输入一个大串,接着输入一个小串,查询小串在大串中出现了几次
    分析:
      1、首先键盘录入2个字符串
        A:定义一个统计变量=0;
        B:在大串中查找小串是否存在,用 int indexOf(String str):返回指定字符在此字符串中第一次出现处的索引。
            a:如果返回的索引值是-1,则说明 大串中并不存在这个小串,输出统计变量
            b:返回的若不是-1,则是这个小串的第一个字符在大串中的索引,这个时候统计变量++
        C:从得到的索引开始,再加上小串的长度,到字符串的最后,开始截取一个新的字符串,再把这个字符串赋值给大串,替换之前的大串
          String substring(int start):从指定位置开始截取字符串,默认到末尾。
        D:再次从B开始循环,直到得到的新字符串没有了这个小串,也就是B中的a
    以上分析定义为一个方法,方法的两个要素:
        a:返回值:int
        b:参数列表:两个字符串,大串和小串

 1 import java.util.Scanner;
 2 public class StringText4 {
 3
 4 public static void main(String[] args) {
 5 //1、首先键盘录入2个字符串
 6 Scanner sc = new Scanner(System.in);
 7 System.out.println("请输入大串:");
 8 String maxstring = sc.nextLine();
 9 System.out.println("请输入小串:");
10 String minstring = sc.nextLine();
11
12 //调用getCount方法
13 int count = getCount(maxstring,minstring);
14 System.out.println(minstring+"在"+maxstring+"中出现了"+count+"次");
15
16 }
17 //定义方法
18 public static int getCount(String max,String min){
19 //定义一个统计变量
20 int count = 0;
21 //在大串中查找小串是否存在,用 int indexOf(String str):返回指定字符在此字符串中第一次出现处的索引。
22 int index;
23 while((index=max.indexOf(min))!= -1){
24 //当得到的索引不是-1时
25 count++;
26 //从得到的索引开始,再加上小串的长度,到字符串的最后,开始截取一个新的字符串,再把这个字符串赋值给大串,替换之前的大串
27 max = max.substring(max.indexOf(min)+min.length());
28 }
29 return count;
30 }
31
32 }
时间: 2025-01-11 13:08:32

java 11-8 在大串中查找小串的案例的相关文章

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

1.int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引.      int indexOf(String str, int startIndex):从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引. 函数数名:indexOf 调用方式:Object(String).indexOf(String str,int startIndex)或String.indexOf(String str) 参数说明:str需要查找的字串. startI

在大词典中查找一组与给定字符串最相似的词

标准的说法是在词典中取出与给定字符串编辑距离最短的词.首先是编辑距离Levenshtein distance的计算, 通过建立两个字符串的矩阵得到, 优化算法是Wagner–Fischer algorithm, 通过DP可以将计算量降低到O(n2)因为计算编辑距离需要耗费相当的时间, 所以这个问题的优化方向就是每次查询尽量减少这种计算的次数. 优化的方法是bk tree. 除了字符串匹配.查找回文串.查找重复子串等经典问题以外,日常生活中我们还会遇到其它一些怪异的字符串问题.比如,有时我们需要知

大串和小串

首先键盘录入2个字符串 A:定义一个统计变量=0: B:在大串中查找小串是否存在,用 int indexOf(String str):返回指定字符在此字符串中第一次出现处的索引. a:如果返回的索引值是-1,则说明 大串中并不存在这个小串,输出统计变量 b:返回的若不是-1,则是这个小串的第一个字符在大串中的索引,这个时候统计变量++ C:从得到的索引开始,再加上小串的长度,到字符串的最后,开始截取一个新的字符串,再把这个字符串赋值给大串,替换之前的大串 String substring(int

HDOJ-2896(AC自动机+文本串中出现了哪几个模板串)

病毒侵袭 HDOJ-2896 主要使用AC自动机解决,其次在query函数中改变一下,用来记录每个模板串出现的次数,还有insert函数中记录模板串的编号 需要注意最好使用结构体,而且不能一次性使用memset否则会超时 上次没有AC出现了output limit exceed问题,后来发现是我的num数组开的太小了,只开了505,实际上需要N的空间. 还有一个问题就是我以前提交的时候很容易就MLE,内存超限,直到我把AC自动机封存到一个结构体中,而且并不是一开始就使用memsettrie树上的

HDU 1686 Oulipo 求大串中最多可匹配多少个小串(kmp)

http://acm.hdu.edu.cn/showproblem.php?pid=1686 Oulipo Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6098    Accepted Submission(s): 2448 Problem Description The French author Georges Perec (19

在本地文件中查找固定字符串(Java)

适用范围:只适用于在文本文档中查找(如,txt.java.c等等,并不适用与doc.xls等等这些文件),可嵌套文件夹.但是对中文不支持. 例如:文件夹:F:/demo 子文件夹:F:/demo/ert 查找结果: 最后附上全部代码: 1 package com.stafen.main; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.util.ArrayList; 6 import java.util.C

java实现——003二维数组中的查找

1 import java.util.Scanner; 2 3 public class T003 { 4 5 public static void main(String[] args) { 6 Scanner in = new Scanner(System.in); 7 int rows = 0, cols = 0; 8 rows = in.nextInt(); 9 cols = in.nextInt(); 10 int a[][] = new int[rows][cols]; 11 for

Linux中查找最耗性能的JAVA代码

在这里总结一下查找Linux.Java环境下最耗CPU性能的代码段的方法.基本上原理就是使用top命令查看最耗cpu的进程和线程(子进程).使用jstack把java线程堆栈给dump下来.然后,在堆栈信息中查找出对应的代码块.具体操作如下: 一.查找最耗cpu的进程 执行:top 输出: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 12789 root 20 0 3320m 689m 10m S 120.5 8.8 15430:4

java基础知识回顾之---java String final类普通方法的应用之“子串在整串中出现的次数”

/* * 2 一个子串在整串中出现的次数. * "loveerlovetyloveuiloveoplove" * 思路: * 1,要找的子串是否存在,如果存在获取其出现的位置.这个可以使用indexOf完成. * 2,如果找到了,那么就记录出现的位置并在剩余的字符串中继续查找该子串, * 而剩余字符串的起始位是出现位置+子串的长度. * 3,以此类推,通过循环完成查找,如果找不到就是-1,并对 每次找到用计数器记录.  * 使用 indexOf()获取某个字符子串在整串中的位置,还使用