1.API
1.1API概述
-
什么是API
? API (Application Programming Interface) :應(yīng)用程序編程接口
-
java中的API
? 指的就是 JDK 中提供的各種功能的 Java類,這些類將底層的實(shí)現(xiàn)封裝了起來,我們不需要關(guān)心這些類是如何實(shí)現(xiàn)的,只需要學(xué)習(xí)這些類如何使用即可,我們可以通過幫助文檔來學(xué)習(xí)這些API如何使用。
1.2如何使用API幫助文檔
- 打開幫助文檔
- 找到索引選項(xiàng)卡中的輸入框
- 在輸入框中輸入Random
- 看類在哪個(gè)包下
- 看類的描述
- 看構(gòu)造方法
- 看成員方法
2.String類
2.1String類概述
? String 類代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被實(shí)現(xiàn)為此類的實(shí)例。也就是說,Java 程序中所有的雙引號(hào)字符串,都是 String 類的對(duì)象。String 類在 java.lang 包下,所以使用的時(shí)候不需要導(dǎo)包!
2.2String類的特點(diǎn)
- 字符串不可變,它們的值在創(chuàng)建后不能被更改
- 雖然 String 的值是不可變的,但是它們可以被共享
- 字符串效果上相當(dāng)于字符數(shù)組( char[] ),但是底層原理是字節(jié)數(shù)組( byte[] )
2.3String類的構(gòu)造方法
-
常用的構(gòu)造方法
方法名 說明 public String() 創(chuàng)建一個(gè)空白字符串對(duì)象,不含有任何內(nèi)容 public String(char[] chs) 根據(jù)字符數(shù)組的內(nèi)容,來創(chuàng)建字符串對(duì)象 public String(byte[] bys) 根據(jù)字節(jié)數(shù)組的內(nèi)容,來創(chuàng)建字符串對(duì)象 String s = “abc”; 直接賦值的方式創(chuàng)建字符串對(duì)象,內(nèi)容就是abc -
示例代碼
public class StringDemo01 { public static void main(String[] args) { //public String():創(chuàng)建一個(gè)空白字符串對(duì)象,不含有任何內(nèi)容 String s1 = new String(); System.out.println("s1:" + s1); //public String(char[] chs):根據(jù)字符數(shù)組的內(nèi)容,來創(chuàng)建字符串對(duì)象 char[] chs = {'a', 'b', 'c'}; String s2 = new String(chs); System.out.println("s2:" + s2); //public String(byte[] bys):根據(jù)字節(jié)數(shù)組的內(nèi)容,來創(chuàng)建字符串對(duì)象 byte[] bys = {97, 98, 99}; String s3 = new String(bys); System.out.println("s3:" + s3); //String s = “abc”; 直接賦值的方式創(chuàng)建字符串對(duì)象,內(nèi)容就是abc String s4 = "abc"; System.out.println("s4:" + s4); } }
2.4創(chuàng)建字符串對(duì)象兩種方式的區(qū)別
-
通過構(gòu)造方法創(chuàng)建
? 通過 new 創(chuàng)建的字符串對(duì)象,每一次 new 都會(huì)申請(qǐng)一個(gè)內(nèi)存空間,雖然內(nèi)容相同,但是地址值不同
-
直接賦值方式創(chuàng)建
? 以“”方式給出的字符串,只要字符序列相同(順序和大小寫),無論在程序代碼中出現(xiàn)幾次,JVM 都只會(huì)建立一個(gè) String 對(duì)象,并在字符串池中維護(hù)
2.5字符串的比較
2.5.1==號(hào)的作用
- 比較基本數(shù)據(jù)類型:比較的是具體的值
- 比較引用數(shù)據(jù)類型:比較的是對(duì)象地址值
2.5.2equals方法的作用
-
方法介紹
public boolean equals(String s) 比較兩個(gè)字符串內(nèi)容是否相同、區(qū)分大小寫
-
示例代碼
public class StringDemo02 { public static void main(String[] args) { //構(gòu)造方法的方式得到對(duì)象 char[] chs = {'a', 'b', 'c'}; String s1 = new String(chs); String s2 = new String(chs); //直接賦值的方式得到對(duì)象 String s3 = "abc"; String s4 = "abc"; //比較字符串對(duì)象地址是否相同 System.out.println(s1 == s2); System.out.println(s1 == s3); System.out.println(s3 == s4); System.out.println("--------"); //比較字符串內(nèi)容是否相同 System.out.println(s1.equals(s2)); System.out.println(s1.equals(s3)); System.out.println(s3.equals(s4)); } }
2.6用戶登錄案例
2.6.1案例需求
? 已知用戶名和密碼,請(qǐng)用程序?qū)崿F(xiàn)模擬用戶登錄??偣步o三次機(jī)會(huì),登錄之后,給出相應(yīng)的提示
2.6.2代碼實(shí)現(xiàn)
public class Test1登錄案例 {
public static void main(String[] args) {
//1.定義兩個(gè)變量用來記錄正確的用戶名和密碼
String rightUsername = "itheima";
String rightPassword = "1234qwer";
//2.鍵盤錄入用戶名和密碼
//ctrl + alt + T 選擇包裹方式
for (int i = 0; i < 3; i++) {//0 1 2
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入用戶名");
String username = sc.next();
System.out.println("請(qǐng)輸入密碼");
String password = sc.next();
//3.判斷比較
if (username.equals(rightUsername) && password.equals(rightPassword)) {
System.out.println("登錄成功");
//如果正確,循環(huán)結(jié)束
break;
} else {
//最后一次機(jī)會(huì)
if(i == 2){
System.out.println("賬戶" + username + "被鎖定,請(qǐng)聯(lián)系黑馬程序員官方小姐姐:XXXXXXX");
}else{
//不是最后一次機(jī)會(huì)
System.out.println("用戶名或密碼錯(cuò)誤,登錄失敗,還剩下" + (2 - i) + "次機(jī)會(huì)");//2 1 0
}
}
}
}
}
2.7遍歷字符串案例
2.7.1案例需求
? 鍵盤錄入一個(gè)字符串,使用程序?qū)崿F(xiàn)在控制臺(tái)遍歷該字符串
2.7.2直接遍歷字符串
public class Test2字符串直接遍歷 {
public static void main(String[] args) {
//兩個(gè)方法:
//charAt():會(huì)根據(jù)索引獲取對(duì)應(yīng)的字符
//length(): 會(huì)返回字符串的長(zhǎng)度
//1.鍵盤錄入一個(gè)字符串
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入字符串");
String str = sc.next();
System.out.println(str);
//2.遍歷
for (int i = 0; i < str.length(); i++) {
//i 依次表示字符串的每一個(gè)索引
//索引的范圍:0 ~ 長(zhǎng)度-1
//根據(jù)索引獲取字符串里面的每一個(gè)字符
//ctrl + alt + V 自動(dòng)生成左邊的接受變量
char c = str.charAt(i);
System.out.println(c);
}
}
}
2.8統(tǒng)計(jì)字符次數(shù)案例
2.8.1案例需求
? 鍵盤錄入一個(gè)字符串,統(tǒng)計(jì)該字符串中大寫字母字符,小寫字母字符,數(shù)字字符出現(xiàn)的次數(shù)(不考慮其他字符)
2.8.2代碼實(shí)現(xiàn)
public class Test4統(tǒng)計(jì)個(gè)數(shù) {
public static void main(String[] args) {
//鍵盤錄入一個(gè)字符串,統(tǒng)計(jì)大寫,小寫,數(shù)字出現(xiàn)的次數(shù)
//1.鍵盤錄入一個(gè)字符串
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入一個(gè)字符串");
String str = sc.next();
//2.統(tǒng)計(jì) --- 計(jì)數(shù)器count
//此時(shí)我要統(tǒng)計(jì)的有3樣?xùn)|西,所以要定義3個(gè)計(jì)數(shù)器分別進(jìn)行統(tǒng)計(jì)
int bigCount = 0;
int smallCount = 0;
int numberCount = 0;
//得到這個(gè)字符串里面每一個(gè)字符
for (int i = 0; i < str.length(); i++) {
//i 表示字符串中的索引
//c 表示字符串中的每一個(gè)字符
char c = str.charAt(i);
//對(duì)c進(jìn)行判斷
if (c >= 'a' && c <= 'z') {
smallCount++;
}else if(c >= 'A' && c <= 'Z'){
bigCount++;
}else if(c >= '0' && c <= '9'){
numberCount++;
}
}
//3.當(dāng)循環(huán)結(jié)束之后,三個(gè)變量記錄的就是對(duì)應(yīng)的個(gè)數(shù)
System.out.println("大寫字符有:" + bigCount + "個(gè)");
System.out.println("小寫字符有:" + smallCount + "個(gè)");
System.out.println("數(shù)字字符有:" + numberCount + "個(gè)");
}
}
2.9字符串拼接案例
2.9.1案例需求
? 定義一個(gè)方法,把 int 數(shù)組中的數(shù)據(jù)按照指定的格式拼接成一個(gè)字符串返回,調(diào)用該方法,
? 并在控制臺(tái)輸出結(jié)果。例如,數(shù)組為 int[] arr = {1,2,3}; ,執(zhí)行方法后的輸出結(jié)果為:[1, 2, 3]
2.9.2代碼實(shí)現(xiàn)
public class Test5數(shù)組拼接成字符串 {
public static void main(String[] args) {
//定義一個(gè)方法,把 int 數(shù)組中的數(shù)據(jù)按照指定的格式拼接成一個(gè)字符串返回,調(diào)用該方法,
//并在控制臺(tái)輸出結(jié)果。例如,數(shù)組為 int[] arr = {1,2,3};
//執(zhí)行方法后的輸出結(jié)果為:[1, 2, 3]
int[] arr = {1, 2, 3, 4, 5};
String str = arrToString(arr);
System.out.println(str);
}
//作用:把一個(gè)數(shù)組變成字符串
public static String arrToString(int[] arr) {
String s = "";
//拼接左括號(hào)
s = s + "["; //此時(shí)是拿著長(zhǎng)度為0的字符串,跟[進(jìn)行拼接,產(chǎn)生一個(gè)新的字符串。
//把新的字符串再賦值給s,此時(shí)變量s記錄的就是新的字符串"["的地址值
//下面我想得到數(shù)組里面的每一個(gè)元素并進(jìn)行拼接
//那么就需要遍歷數(shù)組,得到每一個(gè)元素才行
for (int i = 0; i < arr.length; i++) {
//假設(shè)第一次循環(huán):i = 0 獲取的就是0索引上的元素
//在拼接的時(shí)候:"[" + 1 + ", " 拼接完畢之后產(chǎn)生一個(gè)新的字符串 "[1, "
//第二次循環(huán):i = 1 獲取的就是1索引上的元素
//在拼接的時(shí)候: 此時(shí)s就是第一次循環(huán)結(jié)束后拼接完畢的結(jié)果:"[1, "
//在拼接的時(shí)候:"[1, " + 2 + ", " 拼接完畢之后產(chǎn)生一個(gè)新的字符串 "[1, 2, "
//...
if(i == arr.length - 1){
//如果是最后一個(gè)元素,那么不需要拼接逗號(hào)空格
s = s + arr[i];
}else{
//如果不是最后一個(gè)元素,需要拼接元素和逗號(hào)空格
s = s + arr[i] + ", ";
}
}
//等循環(huán)結(jié)束之后,再拼接最后一個(gè)右括號(hào)
s = s + "]";
return s;
}
//用來遍歷數(shù)組
public static void printArr(int[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
System.out.print(arr[i]);
} else {
System.out.print(arr[i] + ", ");
}
}
System.out.println("]");
//[1, 2, 3, 4, 5]
//我們現(xiàn)在要知道,這個(gè)最終結(jié)果是怎么來的?
//從到右依次打印得來的。
}
}
2.10字符串反轉(zhuǎn)案例
2.10.1案例需求
? 定義一個(gè)方法,實(shí)現(xiàn)字符串反轉(zhuǎn)。鍵盤錄入一個(gè)字符串,調(diào)用該方法后,在控制臺(tái)輸出結(jié)果
? 例如,鍵盤錄入 abc,輸出結(jié)果 cba
2.10.2代碼實(shí)現(xiàn)
public class Test6反轉(zhuǎn)字符串 {
public static void main(String[] args) {
/*定義一個(gè)方法,實(shí)現(xiàn)字符串反轉(zhuǎn)。鍵盤錄入一個(gè)字符串,調(diào)用該方法后,在控制臺(tái)輸出結(jié)果
例如,鍵盤錄入 abc,輸出結(jié)果 cba*/
//1.定義一個(gè)字符串
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入一個(gè)字符串");
String str = sc.next();
//2.定義一個(gè)方法,反轉(zhuǎn)字符串
//abc ---> cba
//可以把字符串倒著遍歷,再拼接
String result = reverse(str);
System.out.println(result);
}
//注釋:方法的作用就是反轉(zhuǎn)字符串
//把傳遞進(jìn)來的字符串進(jìn)行反轉(zhuǎn)
public static String reverse(String str){//abc
//核心思想:倒著遍歷并進(jìn)行拼接就可以了
//fori :正著遍歷 forr:倒著遍歷
String s = "";
for (int i = str.length() - 1; i >= 0; i--) {
//i 依次表示字符串里面的每一個(gè)索引(倒著的)
//我們就可以拿到里面的每一個(gè)字符并拼接
s = s + str.charAt(i);
}
//把倒著拼接之后的結(jié)果返回即可
return s;
}
}
2.11 金額轉(zhuǎn)換
2.11.1 案例需求
? 把2135變成:零佰零拾零萬(wàn)貳仟壹佰叁拾伍元
? 把789變成:零佰零拾零萬(wàn)零仟柒佰捌拾玖元
2.11.2 代碼實(shí)現(xiàn)
package com.itheima.stringdemo;
import java.util.Scanner;
public class StringDemo9 {
public static void main(String[] args) {
//1.鍵盤錄入一個(gè)金額
Scanner sc = new Scanner(System.in);
int money;
while (true) {
System.out.println("請(qǐng)錄入一個(gè)金額");
money = sc.nextInt();
if (money >= 0 && money <= 9999999) {
break;
} else {
System.out.println("金額無效");
}
}
//定義一個(gè)變量用來表示錢的大寫
String moneyStr = "";
//2.得到money里面的每一位數(shù)字,再轉(zhuǎn)成中文
while (true) {//2135
//從右往左獲取數(shù)據(jù),因?yàn)橛覀?cè)是數(shù)據(jù)的個(gè)位
int ge = money % 10;
String capitalNumber = getCapitalNumber(ge);
//把轉(zhuǎn)換之后的大寫拼接到moneyStr當(dāng)中
moneyStr = capitalNumber + moneyStr;
//第一次循環(huán) : "伍" + "" = "伍"
//第二次循環(huán) : "叁" + "伍" = "叁伍"
//去掉剛剛獲取的數(shù)據(jù)
money = money / 10;
//如果數(shù)字上的每一位全部獲取到了,那么money記錄的就是0,此時(shí)循環(huán)結(jié)束
if (money == 0) {
break;
}
}
//3.在前面補(bǔ)0,補(bǔ)齊7位
int count = 7 - moneyStr.length();
for (int i = 0; i < count; i++) {
moneyStr = "零" + moneyStr;
}
System.out.println(moneyStr);//零零零貳壹叁伍
//4.插入單位
//定義一個(gè)數(shù)組表示單位
String[] arr = {"佰","拾","萬(wàn)","仟","佰","拾","元"};
// 零 零 零 貳 壹 叁 伍
//遍歷moneyStr,依次得到 零 零 零 貳 壹 叁 伍
//然后把a(bǔ)rr的單位插入進(jìn)去
String result = "";
for (int i = 0; i < moneyStr.length(); i++) {
char c = moneyStr.charAt(i);
//把大寫數(shù)字和單位拼接到result當(dāng)中
result = result + c + arr[i];
}
//5.打印最終結(jié)果
System.out.println(result);
}
//定義一個(gè)方法把數(shù)字變成大寫的中文
//1 -- 壹
public static String getCapitalNumber(int number) {
//定義數(shù)組,讓數(shù)字跟大寫的中文產(chǎn)生一個(gè)對(duì)應(yīng)關(guān)系
String[] arr = {"零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖"};
//返回結(jié)果
return arr[number];
}
}
2.12 手機(jī)號(hào)屏蔽
需求:以字符串的形式從鍵盤接受一個(gè)手機(jī)號(hào),將中間四位號(hào)碼屏蔽
最終效果為:131****9468
代碼實(shí)現(xiàn):
public class Test8手機(jī)號(hào)屏蔽 {
public static void main(String[] args) {
/*以字符串的形式從鍵盤接受一個(gè)手機(jī)號(hào),將中間四位號(hào)碼屏蔽
最終效果為:131****9468*/
//1.鍵盤錄入一個(gè)手機(jī)號(hào)碼
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入手機(jī)號(hào)碼");
String phoneNumber = sc.next();//13112349408
//2.截取手機(jī)號(hào)碼中的前三位
String star = phoneNumber.substring(0, 3);
//3.截取手機(jī)號(hào)碼中的最后四位
//此時(shí)我用substring方法,是用1個(gè)參數(shù)的,還是兩個(gè)參數(shù)的?1個(gè)參數(shù)的會(huì)更好
//因?yàn)楝F(xiàn)在我要截取到最后,所以建議使用1個(gè)參數(shù)的。
String end = phoneNumber.substring(7);
//4.拼接
String result = star + "****" + end;
System.out.println(result);
}
}
2.13 敏感詞替換
需求1:鍵盤錄入一個(gè) 字符串,如果字符串中包含(TMD),則使用***替換
public class Test9敏感詞替換 {
public static void main(String[] args) {
//1.定義一個(gè)變量表示罵人的話
String talk = "后裔你玩什么啊,TMD";
//2.把這句話中的敏感詞進(jìn)行替換
String result = talk.replace("TMD", "***");
//3.打印
System.out.println(talk);
System.out.println(result);
}
}
需求2:如果要替換的敏感詞比較多怎么辦?
public class Test10多個(gè)敏感詞替換 {
public static void main(String[] args) {
//實(shí)際開發(fā)中,敏感詞會(huì)有很多很多
//1.先鍵盤錄入要說的話
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入要說的話");
String talk = sc.next();//后裔你玩什么啊,TMD,GDX,ctmd,ZZ
//2.定義一個(gè)數(shù)組用來存多個(gè)敏感詞
String[] arr = {"TMD","GDX","ctmd","ZZ","lj","FW","nt"};
//3.把說的話中所有的敏感詞都替換為***
for (int i = 0; i < arr.length; i++) {
//i 索引
//arr[i] 元素 --- 敏感詞
talk = talk.replace(arr[i],"***");
}
//4.打印結(jié)果
System.out.println(talk);//后裔你玩什么啊,***,***,***,***
}
}
2.14 身份證信息查看
? 身份證的每一位都是有固定的含義:
- 1、2位:省份
- 3、4位:城市
- 5、6位:區(qū)縣
- 7-14位:出生年、月、日
- 15、16位:所在地派出所
- 17位:性別(奇數(shù)男性,偶數(shù)女性)
- 18位:個(gè)人信息碼(隨機(jī)產(chǎn)生)
要求打印內(nèi)容方式如下:
? 人物信息為:
? 出生年月日:XXXX年X月X日
? 性別為:男/女
package com.itheima.stringdemo;
public class StringDemo11 {
public static void main(String[] args) {
//1.定義一個(gè)字符串記錄身份證號(hào)碼
String id = "321281202001011234";
//2.獲取出生年月日
String year = id.substring(6, 10);
String month = id.substring(10, 12);
String day = id.substring(12, 14);
System.out.println("人物信息為:");
System.out.println("出生年月日:" + year + "年" + month + "月" + day + "日");
//3.獲取性別
char gender = id.charAt(16);//'3' ---> 3
//利用ASCII碼表進(jìn)行轉(zhuǎn)換
//'0' ---> 48
//'1' ---> 49
//'2' ---> 50
//'3' ---> 51
//'4' ---> 52
//'5' ---> 53
//'6' ---> 54
//'7' ---> 55
//'8' ---> 56
//'9' ---> 57
int num = gender - 48;
if(num % 2 == 0){
System.out.println("性別為:女");
}else{
System.out.println("性別為:男");
}
}
}
3.StringBuilder
StringBuilder 可以看成是一個(gè)容器,創(chuàng)建之后里面的內(nèi)容是可變的。
當(dāng)我們?cè)谄唇幼址头崔D(zhuǎn)字符串的時(shí)候會(huì)使用到
3.1 基本使用
public class StringBuilderDemo3 {
public static void main(String[] args) {
//1.創(chuàng)建對(duì)象
StringBuilder sb = new StringBuilder("abc");
//2.添加元素
/*sb.append(1);
sb.append(2.3);
sb.append(true);*/
//反轉(zhuǎn)
sb.reverse();
//獲取長(zhǎng)度
int len = sb.length();
System.out.println(len);
//打印
//普及:
//因?yàn)镾tringBuilder是Java已經(jīng)寫好的類
//java在底層對(duì)他做了一些特殊處理。
//打印對(duì)象不是地址值而是屬性值。
System.out.println(sb);
}
}
3.2 鏈?zhǔn)骄幊?/h4>
public class StringBuilderDemo4 {
public static void main(String[] args) {
//1.創(chuàng)建對(duì)象
StringBuilder sb = new StringBuilder();
//2.添加字符串
sb.append("aaa").append("bbb").append("ccc").append("ddd");
System.out.println(sb);//aaabbbcccddd
//3.再把StringBuilder變回字符串
String str = sb.toString();
System.out.println(str);//aaabbbcccddd
}
}
3.3 練習(xí)1:對(duì)稱字符串
public class StringBuilderDemo4 {
public static void main(String[] args) {
//1.創(chuàng)建對(duì)象
StringBuilder sb = new StringBuilder();
//2.添加字符串
sb.append("aaa").append("bbb").append("ccc").append("ddd");
System.out.println(sb);//aaabbbcccddd
//3.再把StringBuilder變回字符串
String str = sb.toString();
System.out.println(str);//aaabbbcccddd
}
}
需求:
? 鍵盤接受一個(gè)字符串,程序判斷出該字符串是否是對(duì)稱字符串,并在控制臺(tái)打印是或不是
對(duì)稱字符串:123321、111
非對(duì)稱字符串:123123
代碼示例:
public class StringBuilderDemo6 {
//使用StringBuilder的場(chǎng)景:
//1.字符串的拼接
//2.字符串的反轉(zhuǎn)
public static void main(String[] args) {
//1.鍵盤錄入一個(gè)字符串
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入一個(gè)字符串");
String str = sc.next();
//2.反轉(zhuǎn)鍵盤錄入的字符串
String result = new StringBuilder().append(str).reverse().toString();
//3.比較
if(str.equals(result)){
System.out.println("當(dāng)前字符串是對(duì)稱字符串");
}else{
System.out.println("當(dāng)前字符串不是對(duì)稱字符串");
}
}
}
3.4 練習(xí)2:拼接字符串
需求:定義一個(gè)方法,把 int 數(shù)組中的數(shù)據(jù)按照指定的格式拼接成一個(gè)字符串返回。
? 調(diào)用該方法,并在控制臺(tái)輸出結(jié)果。
? 例如:數(shù)組為int[] arr = {1,2,3};
? 執(zhí)行方法后的輸出結(jié)果為:[1, 2, 3]
代碼示例:
package com.itheima.stringbuilderdemo;
public class StringBuilderDemo7 {
public static void main(String[] args) {
//1.定義數(shù)組
int[] arr = {1,2,3};
//2.調(diào)用方法把數(shù)組變成字符串
String str = arrToString(arr);
System.out.println(str);
}
public static String arrToString(int[] arr){
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("]");
return sb.toString();
}
}
4. StringJoiner
- StringJoiner跟StringBuilder一樣,也可以看成是一個(gè)容器,創(chuàng)建之后里面的內(nèi)容是可變的。
- 作用:提高字符串的操作效率,而且代碼編寫特別簡(jiǎn)潔,但是目前市場(chǎng)上很少有人用。
- JDK8出現(xiàn)的
基本使用:
//1.創(chuàng)建一個(gè)對(duì)象,并指定中間的間隔符號(hào)
StringJoiner sj = new StringJoiner("---");
//2.添加元素
sj.add("aaa").add("bbb").add("ccc");
//3.打印結(jié)果
System.out.println(sj);//aaa---bbb---ccc
//1.創(chuàng)建對(duì)象
StringJoiner sj = new StringJoiner(", ","[","]");
//2.添加元素
sj.add("aaa").add("bbb").add("ccc");
int len = sj.length();
System.out.println(len);//15
//3.打印
System.out.println(sj);//[aaa, bbb, ccc]
String str = sj.toString();
System.out.println(str);//[aaa, bbb, ccc]
關(guān)于字符串的小擴(kuò)展:
-
字符串存儲(chǔ)的內(nèi)存原理
String s = “abc”;直接賦值
特點(diǎn):
? 此時(shí)字符串a(chǎn)bc是存在字符串常量池中的。
? 先檢查字符串常量池中有沒有字符串a(chǎn)bc,如果有,不會(huì)創(chuàng)建新的,而是直接復(fù)用。如果沒有abc,才會(huì)創(chuàng)建一個(gè)新的。
所以,直接賦值的方式,代碼簡(jiǎn)單,而且節(jié)約內(nèi)存。
-
new出來的字符串
看到new關(guān)鍵字,一定是在堆里面開辟了一個(gè)小空間。
String s1 = new String(“abc”);
String s2 = “abc”;
s1記錄的是new出來的,在堆里面的地址值。
s2是直接賦值的,所以記錄的是字符串常量池中的地址值。
-
== 號(hào)比較的到底是什么?
如果比較的是基本數(shù)據(jù)類型:比的是具體的數(shù)值是否相等。
如果比較的是引用數(shù)據(jù)類型:比的是地址值是否相等。
結(jié)論:== 只能用于比較基本數(shù)據(jù)類型。不能比較引用數(shù)據(jù)類型。文章來源:http://www.zghlxwxcb.cn/news/detail-632597.html
后記
????????美好的一天,到此結(jié)束,下次繼續(xù)努力!欲知后續(xù),請(qǐng)看下回分解,寫作不易,感謝大家的支持!! ??????文章來源地址http://www.zghlxwxcb.cn/news/detail-632597.html
到了這里,關(guān)于從零開始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門指南之API、String類(八)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!