String類的概述和使用

來(lái)自拉鉤教育-JAVA就業(yè)集訓(xùn)營(yíng)

String類的概述和使用

String類的概念(重點(diǎn))

  • java.lang.String類用于描述字符串摔桦,Java程序中所有的字符串字面值都可以使用該類的對(duì)象加以描述懂算,如:"abc"值戳。

  • 該類由final關(guān)鍵字修飾虫埂,表示該類不能被繼承主届。

  • 從jdk1.9開(kāi)始該類的底層不使用char[]來(lái)存儲(chǔ)數(shù)據(jù)厂抽,而是改成 byte[]加上編碼標(biāo)記羡蛾,從而節(jié)約了一些空間。

  • 該類描述的字符串內(nèi)容是個(gè)常量不可更改眷茁,因此可以被共享使用炕泳。

  • 如:

    • String str1 = “abc”; - 其中"abc"這個(gè)字符串是個(gè)常量不可改變。
    • str1 = “123”;
      • 將“123”字符串的地址賦值給變量str1蔼卡。
      • 改變str1的指向并沒(méi)有改變指向的內(nèi)容

常量池的概念(原理)

  • 由于String類型描述的字符串內(nèi)容是常量不可改變喊崖,因此Java虛擬機(jī)將首次出現(xiàn)的字符串放入常量池中挣磨,若后續(xù)代碼中出現(xiàn)了相同字符串內(nèi)容則直接使用池中已有的字符串對(duì)象而無(wú)需申請(qǐng)內(nèi)存及創(chuàng)建對(duì)象雇逞,從而提高了性能。
package com.lagou.task12;

public class StringPoolTest {

    public static void main(String[] args) {
        // 1.驗(yàn)證一下常量池的存在
        // 到此為止茁裙,只有String這個(gè)特殊類除了new的方式外還可以直接使用字符串賦值(包裝類除外)
        String str1 = "abc";
        String str2 = "abc";

        // 兩個(gè)對(duì)象正常地址是不相等的塘砸。有常量池的話地址就是同一個(gè)地址
        System.out.println(str1 == str2); // 比較地址  true
    }
}

常用的構(gòu)造方法(練熟、記孜钭丁)

方法聲明 功能介紹
String() 使用無(wú)參方式構(gòu)造對(duì)象得到空字符序列
String(byte[] bytes, int offset, intlength) 使用bytes數(shù)組中下標(biāo)從offset位置開(kāi)始的length個(gè)字節(jié)來(lái)構(gòu)造對(duì)象
String(byte[] bytes) 使用bytes數(shù)組中的所有內(nèi)容構(gòu)造對(duì)象
String(char[] value, int offset, intcount) 使用value數(shù)組中下標(biāo)從offset位置開(kāi)始的count個(gè)字符來(lái)構(gòu)造對(duì)象
String(char[] value) 使用value數(shù)組中的所有內(nèi)容構(gòu)造對(duì)象
String(String original) 根據(jù)參數(shù)指定的字符串內(nèi)容來(lái)構(gòu)造對(duì)象掉蔬,新創(chuàng)建對(duì)象為參數(shù)對(duì)象的副本
package com.lagou.task12;

public class StringConstructorTest {

    public static void main(String[] args) {
        // 1.使用無(wú)參方式構(gòu)造對(duì)象并打印
        String str1 = new String();
        // "" 表示空字符串對(duì)象,有對(duì)象只是里面沒(méi)有內(nèi)容
        // null 表示空矾瘾,連對(duì)象都沒(méi)有
        System.out.println("str1 = " + str1); // 自動(dòng)調(diào)用toString 方法   str1 =

        System.out.println("--------------------------------------------------------");
        // 2.使用參數(shù)指定的byte數(shù)組來(lái)構(gòu)造對(duì)象并打印
        byte[] bArr = {97, 98, 99, 100, 101};
        // 使用字節(jié)數(shù)組中的一部分內(nèi)容來(lái)構(gòu)造對(duì)象女轿,表示使用數(shù)組bArr中下標(biāo)從1開(kāi)始的3個(gè)字節(jié)構(gòu)造字符串對(duì)象
        // 構(gòu)造字符串的思路:就是先將每個(gè)整數(shù)翻譯成對(duì)應(yīng)的字符,再講所有的字符串起來(lái)壕翩。
        // 98 - ‘b’  99 - 'c' 100 - 'd'
        String str2 = new String(bArr, 1, 3);
        System.out.println("str2 = " + str2); // bcd

        // 使用整個(gè)字節(jié)數(shù)組來(lái)構(gòu)造字符串對(duì)象
        String str3 = new String(bArr);
        System.out.println("str3 = " + str3); // abcde
        System.out.println("--------------------------------------------------------");
        // 3.使用字符數(shù)組來(lái)構(gòu)造字符串對(duì)象
        char[] cArr = {'h', 'e', 'l', 'l', 'o'};
        // 使用數(shù)組中的一部分內(nèi)容來(lái)構(gòu)造對(duì)象
        // 思路:直接將字符串起來(lái)
        String str4 = new String(cArr, 2, 2);
        System.out.println("str4 = " + str4); // null
        // 使用整個(gè)字符數(shù)組來(lái)構(gòu)造對(duì)象
        String str5 = new String(cArr);
        System.out.println("str5 = " + str5); // hello

        System.out.println("--------------------------------------------------------");
        // 4.使用字符串來(lái)構(gòu)造字符串對(duì)象
        String str6 = new String("world");
        System.out.println("str6 = " + str6); // world
    }
}
  • 筆試考點(diǎn)
package com.lagou.task12;

public class StringExamTest {
    public static void main(String[] args) {
        // 1.請(qǐng)問(wèn)下面的代碼會(huì)創(chuàng)建幾個(gè)對(duì)象蛉迹?分別存放在什么地方?
//        String str1 = "hello"; // 1個(gè)對(duì)象  存放在常量池中
//        String str1 = new String("hello"); // 2個(gè)對(duì)象放妈, 一個(gè)在常量池中北救,一個(gè)在堆區(qū)

        // 2.常量池和堆區(qū)對(duì)象的比較
        String str1 = "hello"; // 常量池
        String str2 = "hello"; // 常量池 和str1是一個(gè)對(duì)象
        String str3 = new String("hello"); // 堆區(qū)
        String str4 = new String("hello"); // 堆區(qū)

        System.out.println(str1 == str2); // 比較地址 true
        System.out.println(str1.equals(str2)); // 比較內(nèi)容 true
        System.out.println(str3 == str4); // 比較地址 false
        System.out.println(str3.equals(str4)); // 比較內(nèi)容 true
        System.out.println(str2 == str4); // 比較地址 false
        System.out.println(str2.equals(str4)); // 比較內(nèi)容  true

        System.out.println("-------------------------------------------------");
        // 3.常量有優(yōu)化機(jī)制荐操,變量沒(méi)有
        String str5 = "abcd";
        String str6 = "ab" + "cd"; // 常量?jī)?yōu)化機(jī)制 “abcd”
        System.out.println(str5 == str6); // 比較地址 true
        System.out.println(str5.equals(str6)); // 比較內(nèi)容  true

        String str7 = "ab";
        String str8 = str7 + "cd"; // 變量 沒(méi)有常量?jī)?yōu)化機(jī)制 “abcd”
        System.out.println(str5 == str8); // 比較地址 false
        System.out.println(str5.equals(str8)); // 比較內(nèi)容  true


    }
}

常用的成員方法(練熟、記渍洳摺)

方法聲明 功能介紹
String toString() 返回字符串本身
byte[] getBytes() 將當(dāng)前字符串內(nèi)容轉(zhuǎn)換為byte數(shù)組并返回
char[] toCharArray() 用于將當(dāng)前字符串內(nèi)容轉(zhuǎn)換為char數(shù)組并返回
package com.lagou.task12;

public class StringByteCharTest {
    public static void main(String[] args) {
        // 1.創(chuàng)建 String 類型的對(duì)象并打印
        String str1 = new String("world");
        System.out.println("str1 = " + str1); // world

        System.out.println("---------------------------------------");
        // 2.實(shí)現(xiàn)將String類型轉(zhuǎn)換為byte數(shù)組類型
        byte[] bArr = str1.getBytes();
        for (int i = 0; i < bArr.length; i++) {
            System.out.println("下標(biāo)為" + i + "的元素是" + bArr[i]); // 下標(biāo)為0的元素是119 下標(biāo)為1的元素是111 ……
        }
        // 將byte數(shù)組轉(zhuǎn)回string類型并打印
        String str2 = new String(bArr);
        System.out.println("轉(zhuǎn)回字符串為:" + str2); // 轉(zhuǎn)回字符串為:world

        System.out.println("---------------------------------------");
        // 3.實(shí)現(xiàn)將String類型轉(zhuǎn)換為char數(shù)組類型并打印
        // 思路:將字符串拆分為字符并保存到數(shù)組中
        char[] cArr = str1.toCharArray();
        for (int i = 0; i < cArr.length; i++){
            System.out.println("下標(biāo)為" + i + "的元素是" + cArr[i]); // 下標(biāo)為0的元素是w  下標(biāo)為1的元素是o  下標(biāo)為2的元素是r
        }
    }
}
方法聲明 功能介紹
char charAt(int index) 方法charAt用于返回字符串指定位置的字符托启。
int length() 返回字符串字符序列的長(zhǎng)度
boolean isEmpty() 判斷字符串是否為空
package com.lagou.task12;

public class StringCharTest {

    public static void main(String[] args) {
        // 1.構(gòu)造String類型的對(duì)象并打印
        String str1 = new String("hello");
        System.out.println("str1 = " + str1);
        // 2.獲取字符串的長(zhǎng)度和每個(gè)字符并打印
        System.out.println("字符串的長(zhǎng)度是:" + str1.length()); // 5
        System.out.println("下標(biāo)為0的字符是:" + str1.charAt(0)); // h
        System.out.println("下標(biāo)為1的字符是:" + str1.charAt(1)); // e
        System.out.println("下標(biāo)為2的字符是:" + str1.charAt(2)); // l
        System.out.println("下標(biāo)為3的字符是:" + str1.charAt(3)); // l
        System.out.println("下標(biāo)為4的字符是:" + str1.charAt(4)); // o
//        System.out.println("下標(biāo)為5的字符是:" + str1.charAt(5)); // StringIndexOutOfBoundsException 字符串下標(biāo)越界異常

        System.out.println("-----------------------------------------------");
        // 3.使用for循環(huán)獲取所有字符
        for (int i = 0; i < str1.length(); i++) {
            //下標(biāo)為0的字符是:h 下標(biāo)為1的字符是:e 下標(biāo)為2的字符是:l 下標(biāo)為3的字符是:l 下標(biāo)為4的字符是:o
            System.out.println("下標(biāo)為" + i + "的字符是:" + str1.charAt(i));
        }

        System.out.println("-----------------------------------------------");
        // 4.判斷字符串是否為空
        System.out.println(0 == str1.length() ? "字符串為空" : "字符串不為空"); // 字符串不為空
        System.out.println(str1.isEmpty() ? "字符串為空" : "字符串不為空"); // 字符串不為空

        // 5.筆試考點(diǎn)
        // 使用兩種范式實(shí)現(xiàn)字符串 “12345” 轉(zhuǎn)換為整數(shù) 12345 并打印
        String str2 = new String("12345");
        // 方式一:調(diào)用 Integer 類中 parseInt() 方法即可
        int ia = Integer.parseInt(str2);
        System.out.println("轉(zhuǎn)換出來(lái)的整數(shù)是:" + ia); // 12345
        // 方式二:利用 ASCII 來(lái)實(shí)現(xiàn)類型轉(zhuǎn)換并打印
        // '1' - '0' => 1  '2' - '0' => 2 ……
        int ib = 0;
        for (int i = 0; i < str2.length(); i++) {
            ib = ib * 10 + (str2.charAt(i) - '0'); // 1 12 ...
        }
        System.out.println("轉(zhuǎn)換出來(lái)的結(jié)果是:" + ib); // 12345
        
        System.out.println("----------------------------------------");
        // 如何實(shí)現(xiàn)整數(shù)到字符串的轉(zhuǎn)換
        // String str3 = String.valueOf(ib);
        String str3 = "" + ib;
        System.out.println("str3 = " + str3); // 12345
    }
}
  • 案例題目
    • 判斷字符串“上海自來(lái)水來(lái)自海上”是否為回文并打印,所謂回文是指一個(gè)字符序列無(wú)論從左向右讀還是從右向左讀都是相同的句子攘宙。
package com.lagou.task12;

public class StringJudgeTest {
    public static void main(String[] args) {
        // 1.創(chuàng)建字符串對(duì)象并打印
        String str1 = new String("上海自來(lái)水來(lái)自海上");
        System.out.println("str1 = " + str1); // 上海自來(lái)水來(lái)自海上
        // 2.判斷該字符串內(nèi)容是否為回文并打印
        for (int i = 0; i < str1.length() / 2; i++){
            if (str1.charAt(i) != str1.charAt(str1.length() - i - 1)){ // 0和8  1和7  2和6  3和5
                System.out.println(str1 + "不是回文屯耸!");
                return; // 僅僅是用于實(shí)現(xiàn)方法的結(jié)束
            }
        }
        System.out.println(str1 + "是回文!");
    }
}
方法聲明 功能介紹
int compareTo(String anotherString) 用于比較調(diào)用對(duì)象和參數(shù)對(duì)象的大小關(guān)系
int compareToIgnoreCase(String str) 不考慮大小寫(xiě)蹭劈,也就是'a'和'A'是相等的關(guān)系
  • 案例題目
    • 編程實(shí)現(xiàn)字符串之間大小的比較并打印肩民。
package com.lagou.task12;

public class StringCompareTest {
    public static void main(String[] args) {
        // 1.構(gòu)造string類型的對(duì)象并打印
        String str1 = new String("hello");
        System.out.println("str1 = " + str1); // hello
        // 2.使用構(gòu)造好的對(duì)象與其它字符串對(duì)象之間比較大小并打印
        System.out.println(str1.compareTo("world")); // 'h' - 'w' => 104 - 119 => -15
        System.out.println(str1.compareTo("haha")); // 'e' - 'a' => 101 - 97 => 4
        System.out.println(str1.compareTo("hehe")); // 'l' - 'h' => 108 - 104 => 4
        System.out.println(str1.compareTo("heihei")); // 'l' - 'i' => 108 - 105 => 3
        System.out.println(str1.compareTo("helloworld")); // 一樣的比長(zhǎng)度  5 - 10 => -5
        System.out.println(str1.compareToIgnoreCase("HELLO")); // 0
    }
}
方法聲明 功能介紹
String concat(String str) 用于實(shí)現(xiàn)字符串的拼接
boolean contains(CharSequence s) 用于判斷當(dāng)前字符串是否包含參數(shù)指定的內(nèi)容
String toLowerCase() 返回字符串的小寫(xiě)形式
String toUpperCase() 返回字符串的大寫(xiě)形式
String trim() 返回去掉前導(dǎo)和后繼空白的字符串
boolean startsWith(String prefix) 判斷字符串是否以參數(shù)字符串開(kāi)頭
boolean startsWith(String prefix, int toffset) 從指定位置開(kāi)始是否以參數(shù)字符串開(kāi)頭
boolean endsWith(String suffix) 判斷字符串是否以參數(shù)字符串結(jié)尾
  • 案例題目
    • 編程實(shí)現(xiàn)上述方法的使用。
package com.lagou.task12;

public class StringManyMethodTest {
    public static void main(String[] args) {
        // 1.構(gòu)造string類型的對(duì)象并打印
        String str1 = new String("     Let Me Give You Some Color To See See!");
        System.out.println("str1 = " + str1); //     Let Me Give You Some Color To See See!
        // 2.實(shí)現(xiàn)各種成員方法的調(diào)用和測(cè)試
        boolean b1 = str1.contains("some");
        System.out.println("b1 = " + b1); // b1 = false 區(qū)分大小寫(xiě)
        b1 = str1.contains("Some");
        System.out.println("b1 = " + b1); // b1 = true

        System.out.println("-------------------------------------");
        // 將所有字符串轉(zhuǎn)換為大寫(xiě) 小寫(xiě) 以及去除兩邊的空白符
        String str2 = str1.toUpperCase();
        System.out.println("str2 = " + str2); //     LET ME GIVE YOU SOME COLOR TO SEE SEE!
        System.out.println("str1 = " + str1); //     Let Me Give You Some Color To See See!  常量

        String str3 = str1.toLowerCase();
        System.out.println("str3 = " + str3); //     let me give you some color to see see!
        System.out.println("str1 = " + str1); //     Let Me Give You Some Color To See See!  常量

        String str4 = str1.trim();
        System.out.println("str4 = " + str4); //Let Me Give You Some Color To See See!

        System.out.println("-------------------------------------");
        // 判斷字符串是否以...開(kāi)頭  以...結(jié)尾
        b1 = str1.startsWith("Let");
        System.out.println("b1 = " + b1); // false
        b1 = str1.startsWith(" ");
        System.out.println("b1 = " + b1); // true
        // 從下標(biāo)5開(kāi)始是否以"Let"開(kāi)頭
        b1 = str1.startsWith("Let", 5);
        System.out.println("b1 = " + b1); // true

        b1 = str1.endsWith("See");
        System.out.println("b1 = " + b1); // false
        b1 = str1.endsWith("See!");
        System.out.println("b1 = " + b1); // true
    }
}
方法聲明 功能介紹
boolean equals(Object anObject) 用于比較字符串內(nèi)容是否相等并返回
int hashCode() 獲取調(diào)用對(duì)象的哈希碼值
boolean equalsIgnoreCase(StringanotherString) 用于比較字符串內(nèi)容是否相等并返回链方,不考慮大小寫(xiě)持痰,如:'A'和'a'是相等
  • 案例題目
    • 提示用戶從鍵盤(pán)輸入用戶名和密碼信息,若輸入”admin”和”123456”則提示“登錄成功祟蚀,歡迎使用”工窍,否則提示“用戶名或密碼錯(cuò)誤,您還有n次機(jī)會(huì)”前酿,若用戶輸入三次后依然錯(cuò)誤則提示“賬戶已凍結(jié)患雏,請(qǐng)聯(lián)系客服人員!”
package com.lagou.task12;

import java.util.Scanner;

public class StringEqualsTest {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        for (int i = 3; i > 0; i--) {
            // 1.提示用戶從鍵盤(pán)輸入用戶名和密碼信息并使用變量記錄
            System.out.println("請(qǐng)輸入您的用戶名和密碼信息:");
            String userName = sc.next();
            String password = sc.next();

            // 2.判斷用戶名和密碼是否為 "admin" 和 "123456" 并給出提示
//            if ("admin".equals(userName) && "123456".equals(password)) {
            if ("admin".equalsIgnoreCase(userName) && "123456".equals(password)) {
                System.out.println("登錄成功罢维,歡迎使用淹仑!");
                break;
            }
            if (1 == i) {
                System.out.println("賬戶已凍結(jié),請(qǐng)聯(lián)系客服人員肺孵!");
            } else {
                System.out.println("用戶名或密碼錯(cuò)誤匀借,您還有" + (i - 1) + "次機(jī)會(huì)!");
            }
        }
        // 關(guān)閉掃描器
        sc.close();
    }
}
方法聲明 功能介紹
int indexOf(int ch) 用于返回當(dāng)前字符串中參數(shù)ch指定的字符第一次出現(xiàn)的下標(biāo)
int indexOf(int ch, int fromIndex) 用于從fromIndex位置開(kāi)始查找ch指定的字符
int indexOf(String str) 在字符串中檢索str返回其第一次出現(xiàn)的位置平窘,若找不到返回-1
int indexOf(String str, intfromIndex) 表示從字符串的fromIndex位置開(kāi)始檢索str第一次出現(xiàn)的置
int lastIndexOf(int ch) 用于返回參數(shù)ch指定的字符最后一次出現(xiàn)的下標(biāo)
int lastIndexOf(int ch, intfromIndex) 用于從fromIndex位置開(kāi)始查找ch指定字符出現(xiàn)的下標(biāo)
int lastIndexOf(String str) 返回str指定字符串最后一次出現(xiàn)的下標(biāo)
int lastIndexOf(String str, intfromIndex) 用于從fromIndex位置開(kāi)始反向搜索的第一次出現(xiàn)的下標(biāo)吓肋。
package com.lagou.task12;

public class StringIndexTest {
    public static void main(String[] args) {
        // 1.構(gòu)造string類型的對(duì)象并打印
        String str1 = new String("Good Good Study, Day Day Up!");
        System.out.println("str1 = " + str1); // Good Good Study, Day Day Up!
        // 2.實(shí)現(xiàn)字符串中指定字符串和字符串的查找功能
        int pos = str1.indexOf('g');
        System.out.println("pos = " + pos); // -1  代表查找失敗
        pos = str1.indexOf("G");
        System.out.println("pos = " + pos); // 0  該字符第一次出現(xiàn)的索引位置
        // 表示從下表0開(kāi)始查找字符 'G' 第一次出現(xiàn)的索引位置,包含0
        pos = str1.indexOf('G', 0);
        System.out.println("pos = " + pos); // 0  該字符第一次出現(xiàn)的索引位置
        pos = str1.indexOf('G', 1);
        System.out.println("pos = " + pos); // 5 該字符第一次出現(xiàn)的索引位置

        System.out.println("---------------------------------------------------");
        // 查找字符串
        pos = str1.indexOf("day");
        System.out.println("pos = " + pos); // -1
        pos = str1.indexOf("Day");
        System.out.println("pos = " + pos); // 17  字符串第一個(gè)字符的下標(biāo)
        pos = str1.indexOf("Day", 17);
        System.out.println("pos = " + pos); // 17  字符串第一個(gè)字符的下標(biāo)
        pos = str1.indexOf("Day", 18);
        System.out.println("pos = " + pos); // 21  字符串第一個(gè)字符的下標(biāo)

        System.out.println("---------------------------------------------------");
        // 實(shí)現(xiàn)字符和字符串的內(nèi)容的反向查找
        pos = str1.lastIndexOf('G');
        System.out.println("pos = " + pos); // 5  該字符最后一次出現(xiàn)的索引位置
        // 從下標(biāo)5的位置開(kāi)始反向查找
        pos = str1.lastIndexOf('G', 5);
        System.out.println("pos = " + pos); // 5  該字符最后一次出現(xiàn)的索引位置
        pos = str1.lastIndexOf('G', 6);
        System.out.println("pos = " + pos); // 5  該字符最后一次出現(xiàn)的索引位置
        pos = str1.lastIndexOf('G', 4);
        System.out.println("pos = " + pos); // 0  該字符最后一次出現(xiàn)的索引位置

        System.out.println("---------------------------------------------------");
        pos = str1.lastIndexOf("Day");
        System.out.println("pos = " + pos); // 21
        pos = str1.lastIndexOf("Day", 21);
        System.out.println("pos = " + pos); // 21
        pos = str1.lastIndexOf("Day", 20);
        System.out.println("pos = " + pos); // 21
        pos = str1.lastIndexOf("Day", 15);
        System.out.println("pos = " + pos); // -1
    }
}
  • 案例題目
    • 編寫(xiě)通用的代碼可以查詢字符串"Good Good Study, Day Day Up!"中所有"Day"出現(xiàn)的索引位置并打印出來(lái)瑰艘。
package com.lagou.task12;

public class StringIndexTest {
    public static void main(String[] args) {
        // 1.構(gòu)造string類型的對(duì)象并打印
        String str1 = new String("Good Good Study, Day Day Up!");
        System.out.println("str1 = " + str1); // Good Good Study, Day Day Up!
        // 編寫(xiě)通用代碼實(shí)現(xiàn)將字符串str1中所有 "Day" 出現(xiàn)的索引位置找到并打印出來(lái)
        pos = str1.indexOf("Day");

        while (-1 != pos) {
            System.out.println("pos = " + pos); // 17  21
            pos = str1.indexOf("Day", pos + 1);
        }

        System.out.println("---------------------------------------------------");
        // 優(yōu)化一下
        pos = 0;
        while ((pos = str1.indexOf("Day", pos)) != -1) {
            System.out.println("pos = " + pos); // 17  21
            pos += "Day".length();
        }
    }
}
方法聲明 功能介紹
String substring(intbeginIndex, int endIndex) 返回字符串中從下標(biāo)beginIndex(包括)開(kāi)始到endIndex(不包括)結(jié)束的子字符串
String substring(intbeginIndex) 返回字符串中從下標(biāo)beginIndex(包括)開(kāi)始到字符串結(jié)尾的子字符串
  • 案例題目
    • 提示用戶從鍵盤(pán)輸入一個(gè)字符串和一個(gè)字符是鬼,輸出該字符(不含)后面的所有子字符串。
package com.lagou.task12;

import java.util.Scanner;

public class SubStringTest {
    public static void main(String[] args) {
        // 1.構(gòu)造String類型的對(duì)象并打印
        String str1 = new String("Happy Wife, Happy Life!");
        System.out.println("str1 = " + str1); // Happy Wife, Happy Life!
        // 2.獲取字符串中的一部分內(nèi)容并打印
        // 表示從房錢字符串中下標(biāo)12開(kāi)始獲取子字符串
        String str2 = str1.substring(12);
        System.out.println("str2 = " + str2); // Happy Life!
        // 可以去到6但是取不到10
        String str3 = str1.substring(6, 10);
        System.out.println("str3 = " + str3); // Wife

        System.out.println("----------------------------------------");
        // 獲取輸入字符串中從輸入字符起的子字符串內(nèi)容
        System.out.println("請(qǐng)輸入一個(gè)字符串:");
        Scanner sc = new Scanner(System.in);
        String str4 = sc.next();
        System.out.println("請(qǐng)輸入一個(gè)字符:");
        String str5 = sc.next();
        // 從str4中查找str5第一次出現(xiàn)的索引位置
        int pos = str4.indexOf(str5);
        System.out.println("pos = " + pos);
        // 根據(jù)該位置獲取子字符串
        String str6 = str4.substring(pos + 1);
        System.out.println("獲取到的子字符串是:" + str6);
    }
}

正則表達(dá)式的概念(了解)

  • 正則表達(dá)式本質(zhì)就是一個(gè)“規(guī)則字符串”紫新,可以用于對(duì)字符串?dāng)?shù)據(jù)的格式進(jìn)行驗(yàn)證均蜜,以及匹配、查
    找芒率、替換等操作囤耳。該字符串通常使用^運(yùn)算符作為開(kāi)頭標(biāo)志,使用$運(yùn)算符作為結(jié)尾標(biāo)志,當(dāng)然也可以省
    略紫皇。

正則表達(dá)式的規(guī)則(了解)

正則表達(dá)式 說(shuō)明
[abc] 可以出現(xiàn)a慰安、b、c中任意一個(gè)字符
[^abc] 可以出現(xiàn)任何字符聪铺,除了a化焕、b、c的任意字符
[a-z] 可以出現(xiàn)a铃剔、b撒桨、c、……键兜、z中的任意一個(gè)字符
[a-zA-Z0-9] 可以出現(xiàn)az凤类、AZ、0~9中任意一個(gè)字符
正則表達(dá)式 說(shuō)明
. 任意一個(gè)字符(通常不包含換行符)
\d 任意一個(gè)數(shù)字字符普气,相當(dāng)于[0-9]
\D 任意一個(gè)非數(shù)字字符
\s 空白字符谜疤,相當(dāng)于[\t\n\x0B\f\r]
\S 非空白字符
\w 任意一個(gè)單詞字符,相當(dāng)于[a-zA-Z_0-9]
\W 任意一個(gè)非單詞字符
正則表達(dá)式 說(shuō)明
X? 表示X可以出現(xiàn)一次或一次也沒(méi)有现诀,也就是0 ~ 1次
X* 表示X可以出現(xiàn)零次或多次夷磕,也就是0 ~ n次
X+ 表示X可以出現(xiàn)一次或多次,也就是1 ~ n次
X{n} 表示X可以出現(xiàn)恰好 n 次
X{n仔沿,} 表示X可以出現(xiàn)至少 n 次坐桩,也就是>=n次
X{n,m} 表示X可以出現(xiàn)至少 n 次封锉,但是不超過(guò) m 次绵跷,也就是>=n并且<=m次

正則表達(dá)式相關(guān)的方法(熟悉)

方法名稱 方法說(shuō)明
boolean matches(Stringregex) 判斷當(dāng)前正在調(diào)用的字符串是否匹配參數(shù)指定的正則表達(dá)式規(guī)則
  • 案例題目
    • 使用正則表達(dá)式描述一下銀行卡密碼的規(guī)則:要求是由6位數(shù)字組成。
    • 使用正則表達(dá)式描述一下QQ號(hào)碼的規(guī)則:要求是由非0開(kāi)頭的5~15位數(shù)組成成福。
    • 使用正則表達(dá)式描述一下手機(jī)號(hào)碼的規(guī)則:要求是由1開(kāi)頭碾局,第二位數(shù)是3、4闷叉、5擦俐、7、8中的一位握侧,總共11位
    • 描述身份證號(hào)碼的規(guī)則:總共18位,6位數(shù)字代表地區(qū)嘿期,4位數(shù)字代表年品擎,2位數(shù)字代表月,2位數(shù)字代表日期备徐, 3位數(shù)字代表個(gè)人萄传,最后一位可能數(shù)字也可能是X。
package com.lagou.task12;

import java.util.Scanner;

public class StringRegTest {
    public static void main(String[] args) {
        // 1.定義描述規(guī)則的正則表達(dá)式字符串
        // 描述銀行卡密碼的規(guī)則:由6位數(shù)字組成
        // String reg = "^[0-9]{6}$";
        // String reg = "[0-9]{6}";
        // String reg = "\\d{6}";
        // - 使用正則表達(dá)式描述一下QQ號(hào)碼的規(guī)則:要求是由非0開(kāi)頭的5~15位數(shù)組成。
        // String reg = "[1-9]\\d{4,14}";
        //- 使用正則表達(dá)式描述一下手機(jī)號(hào)碼的規(guī)則:要求是由1開(kāi)頭秀菱,第二位數(shù)是3振诬、4、5衍菱、7赶么、8中的一位,總共11位
        // String reg = "1[34578]\\d{9}";
        //- 描述身份證號(hào)碼的規(guī)則:總共18位脊串,6位數(shù)字代表地區(qū)辫呻,4位數(shù)字代表年,2位數(shù)字代表月琼锋,2位數(shù)字代表日期放闺, 3位數(shù)字代表個(gè)人,最后一位可能數(shù)字也可能是X缕坎。
        String reg = "(\\d{6})(\\d{4})(\\d{2})(\\d{2})(\\d{3})([0-9|x])";
        // 2.提示用戶從鍵盤(pán)輸入指定的內(nèi)容并使用變量記錄
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("請(qǐng)輸入您的銀行卡密碼:");
            String str = sc.next();
            // 3.判斷用戶輸入的字符串內(nèi)容是否滿足指定的規(guī)則并打印
            if (str.matches(reg)) {
                System.out.println("銀行卡密碼的格式正確怖侦!");
                break;
            } else {
                System.out.println("銀行卡密碼的格式錯(cuò)誤!");
            }
        }
    }
}
方法名稱 方法說(shuō)明
String[] split(String regex) 參數(shù)regex為正則表達(dá)式谜叹,以regex所表示的字符串為分隔符础钠,將字符串拆分成字符串?dāng)?shù)組
String replace(char oldChar, charnewChar) 使用參數(shù)newChar替換此字符串中出現(xiàn)的所有參數(shù)oldChar
String replaceFirst(String regex,String replacement) 替換此字符串匹配給定的正則表達(dá)式的第一個(gè)子字符串
String replaceAll(String regex,String replacement) 將字符串中匹配正則表達(dá)式regex的字符串替換成replacement
package com.lagou.task12;

public class StringRegMethodTest {
    public static void main(String[] args) {
        // 1.準(zhǔn)備一個(gè)字符串對(duì)象
        String str1 = "1001,zhangfei,30";
        System.out.println("str1 = " + str1); // 1001,zhangfei,30
        // 2.按照逗號(hào)對(duì)字符串內(nèi)容進(jìn)行切割
        String[] sArr = str1.split(",");
        for (int i = 0; i < sArr.length; i++) {
            // 下標(biāo)為0的字符串是1001  下標(biāo)為1的字符串是zhangfei  下標(biāo)為2的字符串是30
            System.out.println("下標(biāo)為" + i + "的字符串是:" + sArr[i]);
        }

        System.out.println("-------------------------------------------------------");
        // 3.準(zhǔn)備一個(gè)字符串內(nèi)容并進(jìn)行替換
        String str2 = "我的小名叫大帥哥";
        // 將字符串中所有的字符 '我' 替換為 '你'
        String str3 = str2.replace('我', '你');
        System.out.println("str2 = " + str2);  //我的小名叫大帥哥
        System.out.println("str3 = " + str3);  //你的小名叫大帥哥
        // 將字符串中所有的字符 '大' 替換為 '小'
        String str4 = str3.replace('大', '小');
        System.out.println("str4 = " + str4); // 你的小名叫小帥哥
        // 將字符串中所有的字符 '小' 替換為 '大'
        String str5 = str4.replace('小', '大');
        System.out.println("str5 = " + str5); // 你的大名叫大帥哥

        System.out.println("-------------------------------------------------------");
        // 4.準(zhǔn)備一個(gè)字符串進(jìn)行字符串內(nèi)容的替換
        String str6 = "123abc456def789ghi";
        // 將第一個(gè)數(shù)字字符串替換為'#'
        String str7 = str6.replaceFirst("\\d+", "#");
        System.out.println("替換第一個(gè)字符串后的結(jié)果是:" + str7); //  #abc456def789ghi
        // 將所有字母的字符串替換為 "ABC"
        String str8 = str7.replaceAll("[a-z]+", "ABC");
        System.out.println("str8 = " + str8);// #ABC456ABC789ABC
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市叉谜,隨后出現(xiàn)的幾起案子旗吁,更是在濱河造成了極大的恐慌,老刑警劉巖停局,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件很钓,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡董栽,警方通過(guò)查閱死者的電腦和手機(jī)码倦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)锭碳,“玉大人袁稽,你說(shuō)我怎么就攤上這事∏芘祝” “怎么了推汽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)歧沪。 經(jīng)常有香客問(wèn)我歹撒,道長(zhǎng),這世上最難降的妖魔是什么诊胞? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任暖夭,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘迈着。我一直安慰自己竭望,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布裕菠。 她就那樣靜靜地躺著咬清,像睡著了一般。 火紅的嫁衣襯著肌膚如雪糕韧。 梳的紋絲不亂的頭發(fā)上枫振,一...
    開(kāi)封第一講書(shū)人閱讀 52,736評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音萤彩,去河邊找鬼粪滤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛雀扶,可吹牛的內(nèi)容都是我干的杖小。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼愚墓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼予权!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起浪册,我...
    開(kāi)封第一講書(shū)人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤扫腺,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后村象,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體笆环,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年厚者,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了躁劣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡库菲,死狀恐怖账忘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情熙宇,我是刑警寧澤鳖擒,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站奇颠,受9級(jí)特大地震影響败去,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烈拒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧荆几,春花似錦吓妆、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至诞吱,卻和暖如春舟奠,著一層夾襖步出監(jiān)牢的瞬間尔破,已是汗流浹背卖哎。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工毁兆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留维苔,地道東北人篙悯。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓型奥,卻偏偏與公主長(zhǎng)得像恼蓬,于是被迫代替她去往敵國(guó)和親蟆炊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子阿趁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容