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 }