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 }

 
















免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM