实体类
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));
}
}