java基礎:String類詳解,案例用戶登錄實現,案例手機號截取實現,案例敏感詞替換實現;StringBuilder類詳解,StringBuilder和String相互轉換


1.API

1.1 API概述-幫助文檔的使用

  • 什么是API

    API (Application Programming Interface) :應用程序編程接口

  • java中的API

    指的就是 JDK 中提供的各種功能的 Java類,這些類將底層的實現封裝了起來,我們不需要關心這些類是如何實現的,只需要學習這些類如何使用即可,我們可以通過幫助文檔來學習這些API如何使用。

如何使用API幫助文檔 :

  • 打開幫助文檔

  • 找到索引選項卡中的輸入框

  • 在輸入框中輸入Random

  • 看類在哪個包下

  • 看類的描述

  • 看構造方法

  • 看成員方法

 

1.2 鍵盤錄入字符串

Scanner類 :

next() : 遇到了空格, 就不再錄入數據了 , 結束標記: 空格, tab鍵

nextLine() : 可以將數據完整的接收過來 , 結束標記: 回車換行符

代碼實現 :

package com.itheima.api;

import java.util.Scanner;

public class Demo1Scanner {
   /*
       next() : 遇到了空格, 就不再錄入數據了

               結束標記: 空格, tab鍵

       nextLine() : 可以將數據完整的接收過來

               結束標記: 回車換行符
    */
   public static void main(String[] args) {
       // 1. 創建Scanner對象
       Scanner sc = new Scanner(System.in);
       System.out.println("請輸入:");
       // 2. 調用nextLine方法接收字符串
       // ctrl + alt + v : 快速生成方法的返回值
       String s = sc.nextLine();

       System.out.println(s);
  }
}
package com.itheima.api;

import java.util.Scanner;

public class Demo2Scanner {
   /*
       nextInt和nextLine方法配合使用的時候, nextLine方法就沒有鍵盤錄入的機會了

       建議: 今后鍵盤錄入數據的時候, 如果是字符串和整數一起接受, 建議使用next方法接受字符串.
    */
   public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       System.out.println("請輸入整數:");
       int num = sc.nextInt(); // 10 + 回車換行
       System.out.println("請輸入字符串:");
       String s = sc.nextLine();


       System.out.println(num);
       System.out.println(s);
  }
}

 

2. String類

2.1 String概述

1 String 類在 java.lang 包下,所以使用的時候不需要導包

2 String 類代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被實現為此類的實例也就是說,Java 程序中所有的雙引號字符串,都是 String 類的對象

3 字符串不可變,它們的值在創建后不能被更改

2.2 String類的構造方法

常用的構造方法

示例代碼

package com.itheima.string;

public class Demo2StringConstructor {
   /*
       String類常見構造方法:

           public String() : 創建一個空白字符串對象,不含有任何內容
           public String(char[] chs) : 根據字符數組的內容,來創建字符串對象
           public String(String original) : 根據傳入的字符串內容,來創建字符串對象
           String s = “abc”; 直接賦值的方式創建字符串對象,內容就是abc

        注意:
               String這個類比較特殊, 打印其對象名的時候, 不會出現內存地址
               而是該對象所記錄的真實內容.

               面向對象-繼承, Object類
    */
   public static void main(String[] args) {
       // public String() : 創建一個空白字符串對象,不含有任何內容
       String s1 = new String();
       System.out.println(s1);

       // public String(char[] chs) : 根據字符數組的內容,來創建字符串對象
       char[] chs = {'a','b','c'};
       String s2 = new String(chs);
       System.out.println(s2);

       // public String(String original) : 根據傳入的字符串內容,來創建字符串對象
       String s3 = new String("123");
       System.out.println(s3);
  }
}

2.4 創建字符串對象的區別對比

  • 通過構造方法創建

    通過 new 創建的字符串對象,每一次 new 都會申請一個內存空間,雖然內容相同,但是地址值不同

  • 直接賦值方式創建

    以“”方式給出的字符串,只要字符序列相同(順序和大小寫),無論在程序代碼中出現幾次,JVM 都只會建立一個 String 對象,並在字符串池中維護

2.5 字符串的比較

2.5.1 字符串的比較

  • == 比較基本數據類型:比較的是具體的值

  • == 比較引用數據類型:比較的是對象地址值

String類 : public boolean equals(String s) 比較兩個字符串內容是否相同、區分大小寫

代碼 :

package com.itheima.stringmethod;

public class Demo1Equals {
   public static void main(String[] args) {
       String s1 = "abc";
       String s2 = "ABC";
       String s3 = "abc";

       // equals : 比較字符串內容, 區分大小寫
       System.out.println(s1.equals(s2));
       System.out.println(s1.equals(s3));

       // equalsIgnoreCase : 比較字符串內容, 忽略大小寫
       System.out.println(s1.equalsIgnoreCase(s2));
  }
}

2.6 用戶登錄案例【應用】

案例需求 :

已知用戶名和密碼,請用程序實現模擬用戶登錄。總共給三次機會,登錄之后,給出相應的提示

實現步驟 :

  1. 已知用戶名和密碼,定義兩個字符串表示即可

  2. 鍵盤錄入要登錄的用戶名和密碼,用 Scanner 實現

  3. 拿鍵盤錄入的用戶名、密碼和已知的用戶名、密碼進行比較,給出相應的提示。

  4. 字符串的內容比較,用equals() 方法實現

  5. 用循環實現多次機會,這里的次數明確,采用for循環實現,並在登錄成功的時候,使用break結束循

代碼實現 :

package com.itheima.test;

import java.util.Scanner;

public class Test1 {
   /*
       需求:已知用戶名和密碼,請用程序實現模擬用戶登錄。
             總共給三次機會,登錄之后,給出相應的提示

       思路:
       1. 已知用戶名和密碼,定義兩個字符串表示即可
       2. 鍵盤錄入要登錄的用戶名和密碼,用 Scanner 實現
       3. 拿鍵盤錄入的用戶名、密碼和已知的用戶名、密碼進行比較,給出相應的提示。
           字符串的內容比較,用equals() 方法實現
       4. 用循環實現多次機會,這里的次數明確,采用for循環實現,並在登錄成功的時候,使用break結束循環

    */
   public static void main(String[] args) {
       // 1. 已知用戶名和密碼,定義兩個字符串表示即可
       String username = "admin";
       String password = "123456";
       // 2. 鍵盤錄入要登錄的用戶名和密碼,用 Scanner 實現
       Scanner sc = new Scanner(System.in);
       // 4. 用循環實現多次機會,這里的次數明確,采用for循環實現
       for(int i = 1; i <= 3; i++){
           System.out.println("請輸入用戶名:");
           String scUsername = sc.nextLine();
           System.out.println("請輸入密碼:");
           String scPassword = sc.nextLine();
           // 3. 拿鍵盤錄入的用戶名、密碼和已知的用戶名、密碼進行比較,給出相應的提示。
           if(username.equals(scUsername) && password.equals(scPassword)){
               System.out.println("登錄成功");
               break;
          }else{
               if(i == 3){
                   System.out.println("您的登錄次數已達到今日上限, 請明天再來");
              }else{
                   System.out.println("登錄失敗,您還剩余" + (3-i) +"次機會");
              }

          }
      }

  }
}

2.7 遍歷字符串案例【應用】

案例需求 :

鍵盤錄入一個字符串,使用程序實現在控制台遍歷該字符串

實現步驟 :

  1. 鍵盤錄入一個字符串,用 Scanner 實現

  2. 遍歷字符串,首先要能夠獲取到字符串中的每一個字符, public char charAt(int index):返回指定索引處的char值,字符串的索引也是從0開始的

  3. 遍歷字符串,其次要能夠獲取到字符串的長度, public int length():返回此字符串的長度

  4. 遍歷打印

代碼實現 :

package com.itheima.test;

import java.util.Scanner;

public class Test2 {
   /*
       需求:鍵盤錄入一個字符串,使用程序實現在控制台遍歷該字符串

       思路:
       1. 鍵盤錄入一個字符串,用 Scanner 實現
       2. 遍歷字符串,首先要能夠獲取到字符串中的每一個字符
           public char charAt(int index):返回指定索引處的char值,字符串的索引也是從0開始的
       3. 遍歷字符串,其次要能夠獲取到字符串的長度
           public int length():返回此字符串的長度
       4. 遍歷打印
9
    */
   public static void main(String[] args) {
       // 1. 鍵盤錄入一個字符串,用 Scanner 實現
       Scanner sc = new Scanner(System.in);
       System.out.println("請輸入:");
       String s = sc.nextLine();
       // 2. 遍歷字符串,首先要能夠獲取到字符串中的每一個字符
       for(int i = 0; i < s.length(); i++){
           // i : 字符串的每一個索引
           char c = s.charAt(i);
           System.out.println(c);
      }
  }
}

2.8 統計字符次數案例【應用】

案例需求 :

鍵盤錄入一個字符串,使用程序實現在控制台遍歷該字符串

實現步驟 :

  1. 鍵盤錄入一個字符串,用 Scanner 實現

  2. 將字符串拆分為字符數組 , public char[] toCharArray( ):將當前字符串拆分為字符數組並返回

  3. 遍歷字符數

代碼實現 :

package com.itheima.test;

import java.util.Scanner;

public class Test3 {
   /*
      需求:鍵盤錄入一個字符串,使用程序實現在控制台遍歷該字符串

      思路:
      1. 鍵盤錄入一個字符串,用 Scanner 實現
      2. 將字符串拆分為字符數組
               public char[] toCharArray( ):將當前字符串拆分為字符數組並返回
      3. 遍歷字符數組

   */
   public static void main(String[] args) {
       // 1. 鍵盤錄入一個字符串,用 Scanner 實現
       Scanner sc = new Scanner(System.in);
       System.out.println("請輸入:");
       String s = sc.nextLine();
       // 2. 將字符串拆分為字符數組
       char[] chars = s.toCharArray();
       // 3. 遍歷字符數組
       for (int i = 0; i < chars.length; i++) {
           System.out.println(chars[i]);
      }
  }
}

2.9 手機號屏蔽-字符串截取

案例需求 :

以字符串的形式從鍵盤接受一個手機號,將中間四位號碼屏蔽 最終效果為:1561234

實現步驟 :

  1. 鍵盤錄入一個字符串,用 Scanner 實現

  2. 截取字符串前三位

  3. 截取字符串后四位

  4. 將截取后的兩個字符串,中間加上進行拼接,輸出結果

代碼實現 :

package com.itheima.test;

import java.util.Scanner;

public class Test5 {
   /*
       需求:以字符串的形式從鍵盤接受一個手機號,將中間四位號碼屏蔽
       最終效果為:156****1234

       思路:
       1. 鍵盤錄入一個字符串,用 Scanner 實現
       2. 截取字符串前三位
       3. 截取字符串后四位
       4. 將截取后的兩個字符串,中間加上****進行拼接,輸出結果

    */
   public static void main(String[] args) {
       // 1. 鍵盤錄入一個字符串,用 Scanner 實現
       Scanner sc = new Scanner(System.in);
       System.out.println("請輸入手機號:");
       String telString = sc.nextLine();
       // 2. 截取字符串前三位
       String start = telString.substring(0,3);
       // 3. 截取字符串后四位
       String end = telString.substring(7);
       // 4. 將截取后的兩個字符串,中間加上****進行拼接,輸出結果
       System.out.println(start + "****" + end);
  }
}

2.10 敏感詞替換-字符串替換

案例需求 :

鍵盤錄入一個 字符串,如果字符串中包含(TMD),則使用***替換

實現步驟 :

  1. 鍵盤錄入一個字符串,用 Scanner 實現

  2. 替換敏感詞 String replace(CharSequence target, CharSequence replacement) 將當前字符串中的target內容,使用replacement進行替換,返回新的字符串

  3. 輸出結果

代碼實現 :

package com.itheima.test;

import java.util.Scanner;

public class Test6 {
   /*
       需求:鍵盤錄入一個 字符串,如果字符串中包含(TMD),則使用***替換

       思路:
       1. 鍵盤錄入一個字符串,用 Scanner 實現
       2. 替換敏感詞
               String replace(CharSequence target, CharSequence replacement)
               將當前字符串中的target內容,使用replacement進行替換,返回新的字符串
       3. 輸出結果

    */
   public static void main(String[] args) {
       // 1. 鍵盤錄入一個字符串,用 Scanner 實現
       Scanner sc = new Scanner(System.in);
       System.out.println("請輸入:");
       String s = sc.nextLine();
       // 2. 替換敏感詞
       String result = s.replace("TMD","***");
       // 3. 輸出結果
       System.out.println(result);
  }
}

2.11 切割字符串

案例需求 :

以字符串的形式從鍵盤錄入學生信息,例如:“張三 , 23”

從該字符串中切割出有效數據,封裝為Student學生對象

實現步驟 :

  1. 編寫Student類,用於封裝數據

  2. 鍵盤錄入一個字符串,用 Scanner 實現

  3. 根據逗號切割字符串,得到(張三)(23)

    String[] split(String regex) :根據傳入的字符串作為規則進行切割 將切割后的內容存入字符串數組中,並將字符串數組返回

  4. 從得到的字符串數組中取出元素內容,通過Student類的有參構造方法封裝為對象

  5. 調用對象getXxx方法,取出數據並打印。

代碼實現 :

package com.itheima.test;

import com.itheima.domain.Student;

import java.util.Scanner;

public class Test7 {
   /*
        需求:以字符串的形式從鍵盤錄入學生信息,例如:“張三 , 23”
               從該字符串中切割出有效數據,封裝為Student學生對象
        思路:
           1. 編寫Student類,用於封裝數據
           2. 鍵盤錄入一個字符串,用 Scanner 實現
           3. 根據逗號切割字符串,得到(張三)(23)
                   String[] split(String regex) :根據傳入的字符串作為規則進行切割
                   將切割后的內容存入字符串數組中,並將字符串數組返回
           4. 從得到的字符串數組中取出元素內容,通過Student類的有參構造方法封裝為對象
           5. 調用對象getXxx方法,取出數據並打印。

    */
   public static void main(String[] args) {
       // 2. 鍵盤錄入一個字符串,用 Scanner 實現
       Scanner sc = new Scanner(System.in);
       System.out.println("請輸入學生信息:");
       String stuInfo = sc.nextLine();
       // stuInfo = "張三,23";
       // 3. 根據逗號切割字符串,得到(張三)(23)
       String[] sArr = stuInfo.split(",");

//       System.out.println(sArr[0]);
//       System.out.println(sArr[1]);

       // 4. 從得到的字符串數組中取出元素內容,通過Student類的有參構造方法封裝為對象
       Student stu = new Student(sArr[0],sArr[1]);

       // 5. 調用對象getXxx方法,取出數據並打印。
       System.out.println(stu.getName() + "..." + stu.getAge());
  }
}

2.12 String方法小結

String類的常用方法 :

public boolean equals(Object anObject) 比較字符串的內容,嚴格區分大小寫

public boolean equalsIgnoreCase(String anotherString) 比較字符串的內容,忽略大小寫

public int length() 返回此字符串的長度

public char charAt(int index) 返回指定索引處的 char 值

public char[] toCharArray() 將字符串拆分為字符數組后返回

public String substring(int beginIndex, int endIndex) 根據開始和結束索引進行截取,得到新的字符串(包含頭,不包含尾)

public String substring(int beginIndex) 從傳入的索引處截取,截取到末尾,得到新的字符串

public String replace(CharSequence target, CharSequence replacement) 使用新值,將字符串中的舊值替換,得到新的字符串

public String[] split(String regex) 根據傳入的規則切割字符串,得到字符串數組

3 StringBuilder類

3.1 StringBuilder類概述

概述 : StringBuilder 是一個可變的字符串類,我們可以把它看成是一個容器,這里的可變指的是 StringBuilder 對象中的內容是可變的

3.2 StringBuilder類和String類的區別

  • String類:內容是不可變的

  • StringBuilder類:內容是可變的

3.3StringBuilder類的構造方法

常用的構造方法

方法名 說明
public StringBuilder() 創建一個空白可變字符串對象,不含有任何內容
public StringBuilder(String str) 根據字符串的內容,來創建可變字符串對象

示例代碼

public class StringBuilderDemo01 {
   public static void main(String[] args) {
       //public StringBuilder():創建一個空白可變字符串對象,不含有任何內容
       StringBuilder sb = new StringBuilder();
       System.out.println("sb:" + sb);
       System.out.println("sb.length():" + sb.length());

       //public StringBuilder(String str):根據字符串的內容,來創建可變字符串對象
       StringBuilder sb2 = new StringBuilder("hello");
       System.out.println("sb2:" + sb2);
       System.out.println("sb2.length():" + sb2.length());
  }
}

3.4 StringBuilder常用的成員方法

  • 添加和反轉方法

    方法名 說明
    public StringBuilder append(任意類型) 添加數據,並返回對象本身
    public StringBuilder reverse() 返回相反的字符序列
  • 示例代碼

public class StringBuilderDemo01 {
   public static void main(String[] args) {
       //創建對象
       StringBuilder sb = new StringBuilder();

       //public StringBuilder append(任意類型):添加數據,並返回對象本身
//       StringBuilder sb2 = sb.append("hello");
//
//       System.out.println("sb:" + sb);
//       System.out.println("sb2:" + sb2);
//       System.out.println(sb == sb2);

//       sb.append("hello");
//       sb.append("world");
//       sb.append("java");
//       sb.append(100);

       //鏈式編程
       sb.append("hello").append("world").append("java").append(100);

       System.out.println("sb:" + sb);

       //public StringBuilder reverse():返回相反的字符序列
       sb.reverse();
       System.out.println("sb:" + sb);
  }
}

3.5StringBuilder和String相互轉換【應用】

  • StringBuilder轉換為String

    public String toString():通過 toString() 就可以實現把 StringBuilder 轉換為 String

  • String轉換為StringBuilder

    public StringBuilder(String s):通過構造方法就可以實現把 String 轉換為 StringBuilder

  • 示例代碼

public class StringBuilderDemo02 {
   public static void main(String[] args) {
       /*
       //StringBuilder 轉換為 String
       StringBuilder sb = new StringBuilder();
       sb.append("hello");

       //String s = sb; //這個是錯誤的做法

       //public String toString():通過 toString() 就可以實現把 StringBuilder 轉換為 String
       String s = sb.toString();
       System.out.println(s);
       */

       //String 轉換為 StringBuilder
       String s = "hello";

       //StringBuilder sb = s; //這個是錯誤的做法

       //public StringBuilder(String s):通過構造方法就可以實現把 String 轉換為 StringBuilder
       StringBuilder sb = new StringBuilder(s);

       System.out.println(sb);
  }
}

3.6 StringBuilder拼接字符串案例

案例需求 :

定義一個方法,把 int 數組中的數據按照指定的格式拼接成一個字符串返回,調用該方法,

並在控制台輸出結果。例如,數組為int[] arr = {1,2,3}; ,執行方法后的輸出結果為:[1, 2, 3]

實現步驟 :

  1. 定義一個 int 類型的數組,用靜態初始化完成數組元素的初始化

  2. 定義一個方法,用於把 int 數組中的數據按照指定格式拼接成一個字符串返回。 返回值類型 String,參數列表 int[] arr

  3. 在方法中用 StringBuilder 按照要求進行拼接,並把結果轉成 String 返回

  4. 調用方法,用一個變量接收結果

  5. 輸出結果

代碼實現 :

/*
   思路:
       1:定義一個 int 類型的數組,用靜態初始化完成數組元素的初始化
       2:定義一個方法,用於把 int 數組中的數據按照指定格式拼接成一個字符串返回。
         返回值類型 String,參數列表 int[] arr
       3:在方法中用 StringBuilder 按照要求進行拼接,並把結果轉成 String 返回
       4:調用方法,用一個變量接收結果
       5:輸出結果
*/
public class StringBuilderTest01 {
   public static void main(String[] args) {
       //定義一個 int 類型的數組,用靜態初始化完成數組元素的初始化
       int[] arr = {1, 2, 3};

       //調用方法,用一個變量接收結果
       String s = arrayToString(arr);

       //輸出結果
       System.out.println("s:" + s);

  }

   //定義一個方法,用於把 int 數組中的數據按照指定格式拼接成一個字符串返回
   /*
       兩個明確:
           返回值類型:String
           參數:int[] arr
    */
   public static String arrayToString(int[] arr) {
       //在方法中用 StringBuilder 按照要求進行拼接,並把結果轉成 String 返回
       StringBuilder sb = new StringBuilder();

       sb.append("[");

       for(int i=0; i<arr.length; i++) {
           if(i == arr.length-1) {
               sb.append(arr[i]);
          } else {
               sb.append(arr[i]).append(", ");
          }
      }

       sb.append("]");

       String s = sb.toString();

       return  s;
  }
}

 

day08課后作業題

代碼題

1.訓練案例1

1.1.需求

自定義一個方法,讓用戶輸入一個“QQ號碼”,在方法中判斷這個QQ號碼是否合法。

1.2.要求

驗證規則:

1) 號碼長度必須是5—12位數字;

2) 首位不能是0;

1.3.思路提示

可以讓用戶通過鍵盤輸入一個字符串數據,我們自定義的方法中接受字符串數據,然后判斷字符串的長度是否合法,如果合法則遍歷這個字符串,判斷首位是不是1-9之間的字符,然后判斷后面的每一個字符是不是0-9之間的字符,只有都合法的時候才返回true,否則返回false;

代碼實現:
package com.heima.meiri.day8;

import java.util.Scanner;

public class mrb1 {
   public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       System.out.println("請輸入您的QQ:");
       String s = sc.nextLine();
       boolean b = qqYanzheng(s);//調用驗證方法,並用boolean類型的變量接收
       if (b == true) {//根據返回的true和false判斷qq是否驗證成功;
           System.out.println("驗證成功!");
      } else {
           System.out.println("驗證失敗!");
      }

  }
   public static boolean qqYanzheng(String qq) {
       if (qq.length() <= 12 && qq.length() >= 5) {//判斷長度
           char c = qq.charAt(0);//提取首位字符
           if (c >= '0' && c <= '9') {//判斷首字符是否合法
               for (int i = 1; i < qq.length(); i++) {
                   if (qq.charAt(i) > '9' || qq.charAt(i) < '0') {//判斷整體數據字符范圍是否合法
                       return false;//不合法返回false
                  }
              }
               return true;//以上條件都不符合返回true

          }
      }
       return false;//代碼執行到此處肯定結果是false
  }
}

運行效果:

 

2.訓練案例2

2.1.需求

鍵盤輸入兩個字符串,一個長,一個短,求短字符串在長字符串中出現的次數;

2.2.要求

注意特殊情況,例如長字符串的開頭和結尾剛好和短字符串一樣時,你求出來的結果也要是正確的;

舉例:

abc字符串在abcdefgabckbsdffabc字符串中出現了: 3次;

2.3.思路提示

可以利用字符串的replace方法將長字符串中所有的短字符串都替換成長度為0的空字符串,這樣一來長字符串的長度必然會減少,那么減少的量除以短字符串的長度,就是短字符串在長字符串中出現的次數;

代碼實現:
package com.heima.meiri.day8;

import java.util.Scanner;
/*
1.創建鍵盤輸入兩次
2.獲取長數組 長度
3.短數組長度
4.將長數組中的短數組替換為空字符
5.獲取替換后長數組長度
6.原長度減去新長度/短數組長度

*/
public class mrb2 {
   public static void main(String[] args) {
       Scanner sc=new Scanner(System.in);
       System.out.println("請輸入被比較的:");
       String s1=sc.next();
       System.out.println("請輸入比較的:");
       String s2=sc.next();
       int clength = s1.length();
       int dlenght = s2.length();
       String replace = s1.replace(s2, "");
       int xlength = replace.length();
       int count=(clength-xlength)/dlenght;
       System.out.println("出現了:"+count+"次");

  }
}
運行效果:

 

day08課后作業題

單選題

1:下面是關於String類 API 當中與判斷相關的方法,哪一個可以用於忽略大小寫驗證碼的判斷(B)

A: public boolean equals(Object anObject){ ... }

B: public boolean equalsIgnoreCase(String anotherString){ ... }

C: public boolean endsWith(String suffix){ ... }

D: public boolean startsWith(String prefix){ ... }

2:下列能夠正確獲取字符串對象長度的操作是(C ) A: size()

B: length

C: length()

D: charAt()

3:下列方法可以將字符串中所有字母轉換為小寫字母格式的是( B) A: public String toUpperCase() B: public String toLowerCase() C: public String replaceAll(String regex,String replacement) D: public String substring(int start)

4:下列選項中,是StringBuilder的添加方法的是(C ) A: capacity() B: length() C: append() D: reverse()

5:請看代碼,結果是( A)

public static void main(String[] args){
   StringBuilder sb = new StringBuilder();
   sb.append("d");
   sb.append("e");
   sb.append("f");
   String s = sb.toString().reverse(); //重點關注這一行代碼
   System.out.println(s);
}

A: fed B: def C: 編譯報錯 D: 運行報錯

6:下列代碼的運行結果是(C )

public static void main(String[] args) {
   String s1 = "abc";
   String s2 = "abc";
   String s3 = "ABC";
   String s4 = "a";
   String s5 = s4 + "bc";
   System.out.println(s1.equals(s2));//t
   System.out.println(s1.equalsIgnoreCase(s3));//t
   System.out.println(s2.equals(s5));//t
   System.out.println(s3.equalsIgnoreCase(s5));//t
}

A: true false true true

B: true true false true

C: true true true true

D: true true true false

7:下列代碼的運行結果是(C )

public static void main(String[] args) {
   String str1 = "lovejavalove";
   String str2 = str1.substring(2, 7);
   System.out.println("str2的結果是:"+str2);
}

A: str2的結果是:ejava B: str2的結果是:vejava C: str2的結果是:vejav D: str2的結果是:oveja

8:下列代碼的運行結果是(C )

public static void main(String[] args) {
   String str = "ilovejavalovelife";
   int index = str.indexOf("love");
   //做題注釋:第一次出現位置1
   String newStr = str.replace("love","miss");
   //做題注釋: 返回一個新的字符串,它是通過用 newChar 替換此字符串中出現的所有 oldChar 得到的。
   System.out.println("index的值是:" + index);//1
   System.out.println("newStr的值是:" + newStr);
}

A: index的值是:5 newStr的值是:imissjavamisslife B: index的值是:5 newStr的值是:imissjavalovelife C: index的值是:1 newStr的值是:imissjavamisslife D: index的值是:1 newStr的值是:imissjavalovelife

9:下列代碼片段的運行結果是( D)

public static void main(String[] args) {
   String str1 = "chengxuyuan@heima";
   String str2 = "com-itcast-cn";
   String[] strs1 = str1.split("@");
   String[] strs2 = str2.split("-");
   System.out.println("strs1[1]結果是:" + strs1[1]);//heima
   System.out.println("strs2[1]結果是:" + strs2[1]);//itcast
}

A: strs1[1]結果是:chengxuyuan strs2[1]結果是:com B: strs1[1]結果是:chengxuyuan strs2[1]結果是:itcast C: strs1[1]結果是:heima 報異常:ArrayIndexOutOfBoundsException D: strs1[1]結果是:heima strs2[1]結果是:itcast

 

多選題

10:String和StringBuilder的區別(BC ) A: String是可變的字符序列 B: String是不可變的字符序列 C: StringBuilder是可變的字符序列 D: StringBuilder是不可變的字符序列

 

代碼題

1.訓練案例1

1.1需求

假如某網站希望使用5個隨機小寫字母作為隨機驗證碼,請自定義一個方法,生成這樣的一個驗證碼並返回;

1.2思路提示

隨機字母不好生成,但是隨機數字是可以的,並且小寫字母的ASCII碼值是97--122范圍之間,因此我們可以生成5個97--122范圍之間的隨機數,然后將這5個隨機數分別轉成字符,連接在一起即可作為驗證碼使用;

1.3效果演示

 

代碼實現:
package com.heima.meiri.day8;

import java.util.Random;

public class kz1 {
   public static void main(String[] args) {
       Random r=new Random();
       StringBuilder sb=new StringBuilder();
       for (int i = 0; i < 5; i++) {
           int num_1 = r.nextInt(26)+97;
           char cha=(char)num_1;
           sb.append(cha);
      }
       System.out.println("5位小寫字母組成的驗證碼是:"+sb);
  }
}
運行效果:

 

2.訓練案例2(擴展題-五星難度)

選擇性做,如果讀完題沒有思路不建議花費過多的時間和精力。

2.1.需求

自定義一個方法,完成隨機生成一個6位數的驗證碼,驗證碼中可以包含大寫字母,小寫字母和數字,但是必須保證至少有一個數字,且數字的位置是隨機的;

2.2.要求

1:分析自定義方法,是否需要參數,是否需要返回值

2:需要自行查詢StringBuilder類的API學習一兩個必要的方法,完成功能;

2.3.思路提示

本題可以分成2個步驟完成,第一個步驟先生成一個6位數字符串驗證碼,不考慮至少一個數字的問題,第二步再解決至少一個數字的問題;

其中第一個步驟實現思路比較多,其中一種思路是提前准備好所有的合法字符,保存到一個數組中,然后隨機從數組中選擇6個字符出來,組成一個長度為6的字符串驗證碼,這個方式准備數組比較麻煩,但是也能實現;還有一種思路是直接生成6個指定范圍的隨機數字,然后把這6個數字強轉成對應的字符即可;例如,你隨機生成的數字是97--122,那么強轉之后一定是一個小寫字母,同理,可以生成大寫字母和數字字符;

當第一個步驟完成后,可以利用StringBuilder類中的setChar方法,將指定索引位置的字符修改成指定的字符;或再第一步的時候,生成5位數的驗證碼,然后這一步利用StringBuilder類中的insert方法將指定的字符插入到指定索引位置,雖然這兩個方法都可以完成效果,但是需要大家自行查詢API學習使用;

2.4.案例效果

package com.heima.meiri.day8;

import java.util.Random;
import java.util.Scanner;

/*
 1.str用來存放隨機數
 2.用一個循環去隨機去str字符串里的字符
 3.產生隨機數位字符串的長度
*/
public class kz2 {
   public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       System.out.println("請輸入要獲取幾位隨機數:");
       int num_1 = sc.nextInt();
       String suiji = Suiji(num_1);//傳入鍵盤錄入的數字,輸入幾打印幾位數的驗證
       System.out.println("隨機數為:" + suiji);//打印驗證碼
  }

   public static String Suiji(int num) {//定義方法
       Random r = new Random();//創建隨機數對象
       StringBuilder sb = new StringBuilder();//創建sb對象
       String s = "abcdefghijklmnpqrstuvwxyABCDEFGHIJKLMNPQRSTUVWXYZ";
       //因為后米娜插入的必出一個數字,所以隨機字符庫沒必要再有數字
       //String s = "abcdefghijklmnpqrstuvwxy0123456789ABCDEFGHIJKLMNPQRSTUVWXYZ";
       //將要隨機獲取的數值存入String變量
       for (int i = 1; i < num; i++) {
           //num為幾就是幾位數的驗證碼
           int num_1 = r.nextInt(s.length());
           //定義隨機數范圍位為string s的字符長度
           sb.append(s.charAt(num_1));
           //因為num1具有隨機性,chaAt(索引)為索引位置的字符,將獲取到的字符存入sb
      }
       int i = r.nextInt(num);//定義隨機索引
       int j = r.nextInt(10);//定義隨機數
       char f=(char)j;
       sb.insert(i, j);//插入0-4隨機索引,插入內容為0-9隨機數字
       return sb.toString();

  }
}
​運行效果:

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

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



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