给定一个字符串和子串特征标记,要求从源字符串中提取特征标记代表的所有子串,如:
给定源字符串:AaaBbb,和子串特征标记ab,要求提取出符合特征标记的所有相同字符组成的子串aa和bb
JAVA代码如下:
import java.util.ArrayList;
import java.util.Scanner;
import static java.lang.System.*;
import java.lang.String;
public class FindSub
{
public static void main(String[] args)
{
String src;
String sublable;
ArrayList<String> list=new ArrayList<String>();
out.println("Please input the source string");
Scanner input=new Scanner(System.in);
src=input.nextLine();
out.println("please input the lable of substring");
sublable=input.nextLine();
list=getSub(src, sublable);
out.println("All substring is:");
for(String s: list)
{
out.println(s);
}
}
public static ArrayList<String> getSub(String src, String sublable)
{
int flag=0;
int low=0, high=0;
char sign='\u0000';
ArrayList<String> list=new ArrayList<String>();
for (int i=0; i<src.length(); i++)
{
if (sublable.contains(src.substring(i, i+1)))
{
if (flag==0 || src.charAt(i)!=sign)
{
if (flag == 0)
{
flag=1;
}
else
{
list.add(src.substring(low, high+1));
}
low=i;
sign=src.charAt(i);
}
high=i;
}
else
{
if (flag==1)
{
list.add(src.substring(low, high+1));
flag=0;
}
}
}
if (flag==1)
list.add(src.substring(low, high+1));
return list;
}
}
运行结果
该程序可以改进,在输出提取出的子串的同时打印子串在源字符串中的起止标号,这样可以区分相同特征标记的不同子串,如:
源字符串AaaBaa特征标记a
输出aa 1, 2
aa 5,6
懒得改了,有兴趣可以自己尝试