JAVA新手牛刀小试之提取相同字符组成的子串
程序员文章站
2022-07-05 12:06:47
给定一个字符串和子串特征标记,要求从源字符串中提取特征标记代表的所有子串,如: 给定源字符串:AaaBbb,和子串特征标记ab,要求提取出符合特征标记的所有相同字符组成的子串aa和bb JAVA代码如下: 运行结果 该程序可以改进,在输出提取出的子串的同时打印子串在源字符串中的起止标号,这样可以区分 ......
给定一个字符串和子串特征标记,要求从源字符串中提取特征标记代表的所有子串,如:
给定源字符串:AaaBbb,和子串特征标记ab,要求提取出符合特征标记的所有相同字符组成的子串aa和bb
JAVA代码如下:
1 import java.util.ArrayList; 2 import java.util.Scanner; 3 4 import static java.lang.System.*; 5 import java.lang.String; 6 public class FindSub 7 { 8 public static void main(String[] args) 9 { 10 String src; 11 String sublable; 12 ArrayList<String> list=new ArrayList<String>(); 13 14 out.println("Please input the source string"); 15 Scanner input=new Scanner(System.in); 16 src=input.nextLine(); 17 18 out.println("please input the lable of substring"); 19 sublable=input.nextLine(); 20 21 list=getSub(src, sublable); 22 23 out.println("All substring is:"); 24 for(String s: list) 25 { 26 out.println(s); 27 } 28 } 29 30 public static ArrayList<String> getSub(String src, String sublable) 31 { 32 int flag=0; 33 int low=0, high=0; 34 char sign='\u0000'; 35 36 ArrayList<String> list=new ArrayList<String>(); 37 38 for (int i=0; i<src.length(); i++) 39 { 40 if (sublable.contains(src.substring(i, i+1))) 41 { 42 if (flag==0) 43 { 44 low=i; 45 high=i; 46 flag=1; 47 sign=src.charAt(i); 48 } 49 else 50 { 51 if (src.charAt(i)==sign) 52 { 53 high=i; 54 } 55 else 56 { 57 list.add(src.substring(low, high+1)); 58 low=i; 59 high=i; 60 sign=src.charAt(i); 61 } 62 } 63 } 64 else 65 { 66 if (flag==1) 67 { 68 list.add(src.substring(low, high+1)); 69 flag=0; 70 } 71 } 72 } 73 if (flag==1) 74 list.add(src.substring(low, high+1)); 75 76 return list; 77 } 78 }
运行结果
该程序可以改进,在输出提取出的子串的同时打印子串在源字符串中的起止标号,这样可以区分相同特征标记的不同子串,如:
源字符串AaaBaa特征标记a
输出aa 1, 2
aa 5,6
懒得改了,有兴趣可以自己尝试