JAVA关于字符串&&字符数组处理的小题目
JAVA关于字符串&&字符数组的小题目
第二题:分析以下需求,并用代码实现
1.键盘录入一个大字符串,再录入一个小字符串
2.统计小字符串在大字符串中出现的次数
3.代码运行打印格式:
请输入大字符串:woaiheima,heimabutongyubaima,wulunheimahaishibaima,zhaodaogongzuojiushihaoma
请输入小字符串:heima
控制台输出:共出现3次
该题目我尝试用 面向过程 和 面向对象两种基本思路进行解答。先来面向过程。
1 import java.util.Scanner; 2 3 /*第二题:分析以下需求,并用代码实现 4 1.键盘录入一个大字符串,再录入一个小字符串 5 2.统计小字符串在大字符串中出现的次数 6 3.代码运行打印格式: 7 请输入大字符串:woaiheima,heimabutongyubaima,wulunheimahaishibaima,zhaodaogongzuojiushihaoma 8 请输入小字符串:heima 9 10 控制台输出:共出现3次 11 创建时间:2018年7月24日15:31:19 12 创建者:ccsoftlucifer 13 */ 14 public class CountBigorSmallString { 15 public static void main(String[] args) { 16 String str1,str2; 17 Scanner sc = new Scanner(System.in); 18 System.out.println("请输入大串:"); 19 str1 = sc.nextLine(); 20 System.out.println("请输入小串:"); 21 str2 = sc.nextLine(); 22 System.out.println(countBigOrSmallString(str1,str2)); 23 /*//用静态字符串先测试。 24 System.out.println(countBigOrSmallString("acbdcfcb","cb"));//结果应该为2 25 System.out.println(countBigOrSmallString("acbdcfcbdghcbsdggcb","cb"));//结果应该为4 26 System.out.println(countBigOrSmallString("acbcbdcfcb","cb"));//结果应该为3*/ 27 } 28 public static int countBigOrSmallString(String str1,String str2){ 29 int count=0; 30 //将 接收到的两组String类型的字符串分别转换为char 类型的字符数组。 31 char array1[] = str1.toCharArray(); 32 char array2[] = str2.toCharArray(); 33 for (int i = 0; i < array1.length; i++) { 34 int flag; 35 //用循环遍历 寻找与array2[0]相同的元素。 36 if(array1[i]==array2[0]){ 37 //对flag标记值进行初始化 38 flag=0; 39 //从相同的第一个元素头开始,比较后面其他的元素是否相同,只要有一个不同,则不相同。将标记值flag标记为1 40 for (int j=0,k=i;j<array2.length;j++,k++){ 41 if (array1[k]!=array2[j]) { 42 //flag = 1表示开头相同,后续字符串不相同的字符串。 不予以计数。 43 flag=1; 44 } 45 } 46 //如果标记值没标记为1,说明此次两个字符串比较,后续字符串全部相同,count++; 47 if (flag==0) 48 count++; 49 } 50 } 51 return count; 52 } 53 }
除了上述面向过程的解题思路之外,还有面向对象的方法,用indexOf(string,index) 和循环不断去找匹配的元素。
因为indexOf的返回值是匹配的的字符串的位置,那么我下次找的时候,就在该位置之后继续找。一直找不到返回-1为止。
1 import java.util.Scanner; 2 3 /*第二题:分析以下需求,并用代码实现 4 1.键盘录入一个大字符串,再录入一个小字符串 5 2.统计小字符串在大字符串中出现的次数 6 3.代码运行打印格式: 7 请输入大字符串:woaiheima,heimabutongyubaima,wulunheimahaishibaima,zhaodaogongzuojiushihaoma 8 请输入小字符串:heima 9 10 控制台输出:共出现3次 11 创建时间:2018年7月24日15:31:19 12 创建者:ccsoftlucifer 13 */ 14 public class CountBigorSmallString { 15 public static void main(String[] args) { 16 String str1,str2; 17 Scanner sc = new Scanner(System.in); 18 System.out.println("请输入大串:"); 19 str1 = sc.nextLine(); 20 System.out.println("请输入小串:"); 21 str2 = sc.nextLine(); 22 System.out.println(countBigOrSmallString(str1,str2)); 23 /*//用静态字符串先测试。 24 System.out.println(countBigOrSmallString("acbdcfcb","cb"));//结果应该为2 25 System.out.println(countBigOrSmallString("acbdcfcbdghcbsdggcb","cb"));//结果应该为4 26 System.out.println(countBigOrSmallString("acbcbdcfcb","cb"));//结果应该为3*/ 27 } 28 public static int countBigOrSmallString(String str1,String str2){ 29 int count=0; 30 // int start = str1.indexOf(str2); 31 int flag = 0; 32 // System.out.print(start); 33 int i =0; 34 //无限循环开始找 35 for (;;) { 36 //flag用来接收indexOf();方法的返回值 37 flag = str1.indexOf(str2,i); 38 // System.out.print("flag="+flag+" "); 39 //如果返回值>-1说明找到了,找到了就count ++ 40 if(flag>-1) 41 count++; 42 else 43 //没有找到就跳出 44 break; 45 //i如何自增的在本题是关键,每次当我们找到一个匹配的字符串之后,我们要跳过这个字符串进行下次搜索。 46 //那么 i的下次位置 = 方法返回第一个匹配字符的位置-这个字符当前的位置1 + 小字符串的长度 47 i=flag-1+str2.length(); 48 } 49 // System.out.println(count); 50 return count; 51 } 52 }
第三题:分析以下需求,并用代码实现
定义String getStr()方法
功能描述:
获取长度为5的随机字符串
字符串由随机的4个大写英文字母和1个0-9之间(包含0和9)的整数组成
英文字母和数字的顺序是随机的
1 import java.util.*; 2 /* 3 * 第三题:分析以下需求,并用代码实现 4 定义String getStr()方法 5 功能描述: 6 获取长度为5的随机字符串 7 字符串由随机的4个大写英文字母和1个0-9之间(包含0和9)的整数组成 8 英文字母和数字的顺序是随机的 9 创建时间:2018年7月24日16:56:06 10 创建者:ccsoftlucifer 11 * */ 12 public class RandomCharNum { 13 //定义String getStr()方法 14 public static void getStr(){ 15 //1.先创建一个字符数组,题目要求长度为5,即是字符数组的上限为5 16 char array[] = new char[5]; 17 //2.创建了字符数组之后呢,我们先随机生成一个索引值0-4,再产生一个随机值放入array[0]-array[4]随机一个中。 18 // Random ra = new Random(); 19 int flag = new Random().nextInt(5); 20 int numRandom = new Random().nextInt(10); 21 array[flag] =(char)(numRandom+48); 22 //.3.用一个标记记住步骤2的索引值,除了那个索引值之外,其他的所有值 用随机方法,产生英文字母。 23 // 当索引值碰到标记值时,尝试用countinue语句跳过,这样就不会改变步骤2的值 24 for (int i=0;i<5;i++){ 25 if(i==flag) 26 continue; 27 int charRandom = new Random().nextInt(24); 28 array[i]=(char)(charRandom+'A'); 29 } 30 for (int j=0;j<5;j++) 31 System.out.print(array[j]); 32 } 33 34 public static void main(String[] args) { 35 getStr(); 36 } 37 }