5.30模式匹配作业

实体类


    package substriRepl;

    import java.util.ArrayList;
    import java.util.List;

    public class ModelMatch
    {
        //1.获取子串在父串第一次出现的位置
        public int getSubStringIndex(String superstr,String subStr){
              //max:外层循环时比较的次数(父串长度-子串长度)
              int max=superstr.length( ) - subStr.length( ); 
              //获取子串长度
              int subStrLen=subStr.length( );
              //外层循环,进行max次比较
              test:
                  for(int i=0;i<=max;i++){
                       int j=i;   //将i的索引位置赋予j
                       Boolean flag=true;
                        //内层循环,进行subStrLen次比较
                       for(int k=0;k<subStrLen;k++){
                       //进行比较时,父串与子串的第一个字符若未匹配成功,则进入外层循环的下一次比较
                            if(superstr.charAt(j)!=subStr.charAt(k)){

                                continue test;
                            }
                              j++;
                       }
                      if(flag==true)
                            return i;

                     //结束test所标识的循环
                     break test;
              }
              return -1;
        }

            //2.找出子串在主串中所有出现的位置
            public List getAllSubStringIndex(String superstr,String subStr){
               //定义一个List集合变量,准备存放所有出现的位置。
                List list = new ArrayList();
                //max:外层循环时比较的次数(父串长度-子串长度)
                int max=superstr.length()-subStr.length();
                //获取子串长度
                int subStrLen=subStr.length();

                Boolean flag=false;

                test:for(int i=0;i<=max;i++){
                    int j=i;
                    flag=true;
                    for(int k=0;k<subStrLen;k++){
                          if(superstr.charAt(j)!=subStr.charAt(k)){
                               //结束本次循环,继续outer所标识的那层循环的下一次循环。寻找下一次出现的位置
                                continue test;
                          }
                          j++;
                    }
                    //把出现的位置放到集合中。
                      if (flag==true){
                        list.add(i);// 找到元素后向list中添加
                }

                }
                 //返回所有子串出现位置的集合
                   return list;
            }

                // 3.将主串中所含的所有子串替换成”AAA”
                  public String getSubStringIndexAndReplace(String superstr,String subStr,String replaceStr)
                  {
                         int max=superstr.length()-subStr.length();//外层循环比较的最大次数
                         int subStrLen=subStr.length();//子串的长度
                         int replaceStrLen=replaceStr.length();//替换串的长度
                         test:for(int i=0;i<=max;i++){
                                int flag=i;
                                for(int j=0;j<subStrLen;j++){
                                    if(superstr.charAt(flag)!=subStr.charAt(j)){
                                           continue test;
                                   }
                                 flag++;
                                }
                          String  start=superstr.substring(0,i);//截取目标子串前面部分
                          String  end=superstr.substring(i+subStr.length());//截取目标子串的后面部分
                           superstr=start+replaceStr+end;//拼接and替换
                         }
                         return superstr;
             }
}


测试类


   import substriRepl.ModelMatch;
   import java.util.List;

  public class ModelMatchTest
  {
      public static void main(String[] args){
          //父串
          String superstr="Look for a substring subs test";

         //子串
          String subStr="subs";

          //替换串
          String replaceStr="AAA";

          ModelMatch modelMatch=new ModelMatch();

          //子串在父串首次出现的位置
         // System.out.println("子串在父串首次出现的位置"+modelMatch.getSubStringIndex(superstr,subStr) );
          System.out.println("子串在父串首次出现的位置:"+modelMatch.getSubStringIndex(superstr, subStr));


          List result=modelMatch.getAllSubStringIndex(superstr,subStr);
          System.out.println(result);
          for(int i=0;i<result.size();i++){
               //子串在父串出现的所有位置
          System.out.println("子串在父串所有出现的位置:"+result.get(i));
          }

            //将主串中所含的所有子串替换成”AAA”并输出
             System.out.println("替换前的字符串:"+superstr);
             System.out.println("被替换串为:"+subStr);
             System.out.println("替换串为: "+replaceStr);
             System.out.println("替换后的字符串:"+modelMatch.getSubStringIndexAndReplace(superstr,subStr,replaceStr));
      }
  }

猜你喜欢

转载自blog.csdn.net/qq_36154665/article/details/80571944