欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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 }

运行结果
JAVA新手牛刀小试之提取相同字符组成的子串

该程序可以改进,在输出提取出的子串的同时打印子串在源字符串中的起止标号,这样可以区分相同特征标记的不同子串,如:

源字符串AaaBaa特征标记a

输出aa 1, 2

aa 5,6

懒得改了,有兴趣可以自己尝试