听毕老师讲课时突然想到:怎么去获取字符串中的子字符串的方法?
class Test_1
{
String str="cbaabkcdak123bakkd";
int w=-1,q=-1,p=-1;
public void show(char b,char a,char k)//引入参数为了扩展该程序的实用性!
{
if (str.contains("bak"))//随着参数的变化而变化
{
int i=0,j=0, c=0;
int x=0,y=0, v=0;
//将w所得到索引值放到一个数组m。
for(;x<str.lastIndexOf('b');x++)
{
w=str.indexOf('b',w+1);
if(w==-1)
{
break;
}
}
//System.out.print("执行的次数"+x);
System.out.println();
int[] m=new int[x];
for(;i<str.lastIndexOf('b');i++)
{
w=str.indexOf('b',w+1);
if(w==-1)
{
break;
}
// System.out.print(w+" ");
m=w;
// System.out.println("数组的值"+"m["+i+"]="+m);
}
System.out.println();
//将获取a的索引值放到数组n中
for (;y<str.lastIndexOf('a') ;y++ )
{
q=str.indexOf('a',q+1);
if (q==-1)
{
break;
}
}
//System.out.println("循环次数为"+y);
int[] n=new int[y];
for(;j<str.lastIndexOf('a');j++)
{
q=str.indexOf('a',q+1);
if(q==-1)
{
break;
}
n[j]=q;
//System.out.print(q+" ");
//System.out.println("数组的值"+"n["+j+"]="+n[j]);
}
System.out.println();
//将获得k的索引值放到数组h中
for (;v<str.lastIndexOf('k') ;v++ )
{
p=str.indexOf('k',p+1);
if (p==-1)
{
break;
}
}
//System.out.println("执行次数"+v);
int[] h=new int[v];
for(;c<str.lastIndexOf('k');c++)
{
p=str.indexOf('k',p+1);
if(p==-1)
{
break;
}
h[c]=p;
// System.out.print(p+" ");
// System.out.println("数组的值"+"h["+c+"]="+h[c]);
}
//通过算法获得可能的的值,再通过使用substring方法获得子字符串!
for (int e=0;e<m.length ;e++ )
{
for (int d=0;d<n.length ;d++ )
{
for (int f=0;f<h.length ;f++ )
{
if (n[d]-m[e]==1&&h[f]-n[d]==1&&h[f]-m[e]==2)
{
System.out.println("可能性是"+" "+m[e]+" "+n[d]+" "+h[f]);
System.out.println(str.substring(m[e],h[f]+1));
}
}
}
}
}
else
System.out.println("-1");
}
}
class Demo
{
public static void main(String[] args)
{
Test_1 t=new Test_1();
t.show('b','a','k');
}
}
这是我写的一种,还有一种思路就是通过获得‘a’的索引值建立数组如a[],然后通过a-1的int值,去使用charAt与'b'作等比较和a+1的值
通过使用charAt与‘k'作等比较,来获取子字符串bak。
不知道大家有没有什么好的方法,也帮我看看,将我上面的程序优化一下!
|
|