這篇具有很好參考價值的文章主要介紹了String(字符串)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。
1、String概述
- java.lang.String類代表字符串,Java程序中的所有字符串文字(例如“abc”)都為此類的對象。
1.1、String的注意點
- 字符串的內容是不會發(fā)生改變的,它的對象在創(chuàng)建后不能被更改。
1.2、總結
- String是Java定義好的一個類。定義在java.lang包中,所以使用的時候不需要導包。
- Java程序中的所有字符串文字都被實為此類的對象。
- 字符串不可變,它們的值在創(chuàng)建后不能被更改。
2、String構造方法代碼實現(xiàn)和內存分析
2.1、創(chuàng)建String對象的兩種方式
-
直接賦值????????????????
String? ? ? ? ? name? ? ? ? =? ? ? ? " 字符串 "; |
package stringdemo;
public class StringDemo1 {
public static void main(String[] args) {
String s1 = "abc";
System.out.println(s1);
}
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=21864:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringDemo1
abc
Process finished with exit code 0
- new
構造方法 |
說明 |
public? ? ? ? ?String() |
創(chuàng)建空白字符串,不含任何內容 |
public? ? ? ? ?String(String original) |
根據傳入的字符串,創(chuàng)建字符串對象 |
public? ? ? ? ?String(char[ ]? ? ? ? chs) |
根據字符數組,創(chuàng)建字符串對象 |
public? ? ? ? ?String(byte[? ]? ? ? ?chs) |
根據字節(jié)數組,創(chuàng)建字符串對象 |
? ?????????????????????????????????????????????????????????????????????????????????????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
package stringdemo;
public class StringDemo1 {
public static void main(String[] args) {
String s2 = new String();
System.out.println("@" + s2 + "!");//@!
String s3 = new String("abc");
System.out.println(s3);//abc
// 應用場景:修改字符串的內容。abcd --> Qbcd
char[] chs = {'a', 'b', 'c', 'd'};
String s4 = new String(chs);
System.out.println(s4);//abcd
// 應用場景:以后在網絡當中傳輸的數據其實都是字節(jié)信息
// 我們一般要把字節(jié)信息進行轉換,轉成字符串,此時就要用到這個構造了。
byte[] bytes = {97, 98, 99, 100};
String s5 = new String(bytes);
System.out.println(s5);//abcd
}
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=2016:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringDemo1
@!
abc
abcd
abcd
Process finished with exit code 0
2.2、String內存分析,內存模型
2.2.1、直接賦值內存分析
-
注意:StringTable(串池)在JDK7版本開始從方法區(qū)挪到了堆內存

- ?當使用雙引號直接賦值時,系統(tǒng)會檢查字符串在串池中是否存在。不存在:創(chuàng)建新的,存在:復用
2.2.2、手動new內存圖解析

3、字符串的比較
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?==號比的到底是什么? |
基本數據類型 |
引用數據類型 |
基本數據類型比較的是數據值 |
引用數據類型比較的是地址值 |
 |
 |
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?字符串的比較 |
- boolean? equals方法(要比較的字符串)
|
|
- boolean equalsIgnoreCase(要比較的字符串)
|
|
?
package stringdemo;
import java.util.Scanner;
public class StringDemo1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個字符串");
String str1 = sc.next();//是new出來的
String str2 = "abc";
System.out.println(str1 == str2);//false
}
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=4197:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringDemo1
請輸入一個字符串
abc
false
Process finished with exit code 0
- 查看next();方法的源碼發(fā)現(xiàn)鍵盤輸入的字符串是new出來的。

4、練習-用戶登錄
- 已知正確的用戶名和密碼,請用程序實現(xiàn)模擬用戶登錄??偣步o三次機會,登錄之后,給出相應的提示。
-
package stringdemo;
import java.util.Scanner;
public class StringDemo1 {
public static void main(String[] args) {
String rightUsername = "zhangsan";
String rightPassword = "123456";
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
System.out.println("請輸入用戶名");
String username = sc.next();
System.out.println("請輸入密碼");
String password = sc.next();
if (username.equals(rightUsername) && password.equals(rightPassword)) {
System.out.println("用戶登錄成功");
break;
} else {
if (i == 2) {
System.out.println("賬號" + username + "被鎖定,請聯(lián)系管理員客服:");
}
System.out.println("用戶登錄失敗,用戶名或密碼有誤,您還剩下" + (2 - i) + "次機會");
}
}
}
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=5568:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringDemo1
請輸入用戶名
z
請輸入密碼
z
用戶登錄失敗,用戶名或密碼有誤,您還剩下2次機會
請輸入用戶名
z
請輸入密碼
z
用戶登錄失敗,用戶名或密碼有誤,您還剩下1次機會
請輸入用戶名
z
請輸入密碼
z
賬號z被鎖定,請聯(lián)系管理員客服:
用戶登錄失敗,用戶名或密碼有誤,您還剩下0次機會
z
Process finished with exit code 0
5、練習-遍歷字符串和統(tǒng)計字符個數
5.1、遍歷字符串
- 需求:鍵盤錄入一個字符串,使用程序實現(xiàn)在控制臺遍歷該字符串
- public char chatAt(int index):
|
|
|
|
|
|
|
|
package stringdemo;
import java.util.Scanner;
public class StringTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入字符串");
String next = sc.next();
for (int i = 0; i < next.length(); i++) {
char c = next.charAt(i);
System.out.println(c);
}
}
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=31884:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringTest
請輸入字符串
abcd
a
b
c
d
Process finished with exit code 0
5.2、統(tǒng)計字符次數
- 鍵盤錄入一個字符串,統(tǒng)計該字符串中大寫字母字符,小寫字符字符,數字字符出現(xiàn)的次數(不考慮其他字符)
package stringdemo;
import java.util.Scanner;
public class StringTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入字符串");
String next = sc.next();
int capital = 0;
int smallLetter = 0;
int numberCount = 0;
for (int i = 0; i < next.length(); i++) {
char c = next.charAt(i);
if (c >= 'A' && c <= 'Z') {
capital++;
}
if (c >= 'a' && c <= 'z') {
smallLetter++;
}
if (c >= 48 && c <= 57) {
numberCount++;
}
// System.out.println(c);
}
System.out.println("大寫字母有:" + capital + "個");
System.out.println("小寫字母有:" + smallLetter + "個");
System.out.println("數字有:" + numberCount + "個");
}
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=33003:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringTest
請輸入字符串
AZRTazqwer39473
大寫字母有:4個
小寫字母有:6個
數字有:5個
Process finished with exit code 0
6、練習-拼接字符串和反轉
6.1、拼接字符串
- 定義一個方法,把int數組中的數據按照指定的格式拼接成一個字符串返回,調用該方法,并在控制臺輸出結果。
package stringdemo;
public class StringTest {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
String s = arrToString(arr);
System.out.println(s);
}
public static String arrToString(int[] arr) {
if (arr == null) {
return "";
}
if (arr.length == 0) {
return "[]";
}
String result = "[";
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
result = result + arr[i];
} else {
result = result + arr[i] + ", ";
}
}
result = result + "]";
return result;
}
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=33811:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringTest
[1, 2, 3]
Process finished with exit code 0
6.2、字符串反轉
- 定義一個方法,實現(xiàn)字符串反轉。鍵盤錄入一個字符串,調用該方法后,在控制臺輸出結果,例如,鍵盤錄入abc,輸出結果cba
package stringdemo;
import java.util.Scanner;
public class StringTest {
public static void main(String[] args) {
System.out.println(reverser());
}
public static String reverser() {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入字符串");
String str = sc.next();
String result = "";
for (int length = str.length() - 1; length >= 0; length--) {
char c = str.charAt(length);
result = result + c;
}
return result;
}
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=34637:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringTest
請輸入字符串
abc
cba
Process finished with exit code 0
7、較難練習-金額轉換

package stringdemo;
import java.util.Scanner;
public class StringTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int money;
while (true) {
System.out.println("請輸入一個金額");
money = sc.nextInt();
if (money >= 0 && money <= 9999999) {
break;
} else {
System.out.println("金額無效");
}
}
String moneyStr = "";
while (true) {
int ge = money % 10;
String capitalNumber = getCapitalNumber(ge);
moneyStr = capitalNumber + moneyStr;
money = money / 10;
if (money == 0) {
break;
}
}
int count = 7 - moneyStr.length();
for (int i = 0; i < count; i++) {
moneyStr = "零" + moneyStr;
}
System.out.println(moneyStr);
String[] arr = {"佰", "拾", "萬", "仟", "佰", "拾", "元"};
String result = "";
for (int i = 0; i < moneyStr.length(); i++) {
char c = moneyStr.charAt(i);
result = result + c + arr[i];
}
System.out.println(result);
}
public static String getCapitalNumber(int number) {
String[] arr = {"零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖"};
return arr[number];
}
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=2152:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringTest
請輸入一個金額
2135
零零零貳壹叁伍
零佰零拾零萬貳仟壹佰叁拾伍元
Process finished with exit code 0
?8、練習-手機號屏蔽-身份證號碼信息查看-游戲罵人敏感詞替換
- String substring (int beginIndex,int? endIndex)
|
- 截?。ㄗ⒁恻c:包頭不包尾,包左不包右,只有返回值才是截取的小串)
|
- String substring(int? beginIndex)
|
|
8.1、手機號屏蔽
package stringdemo;
public class StringTest {
public static void main(String[] args) {
String phoneNumber = "13112349468";
String start = phoneNumber.substring(0, 3);
String end = phoneNumber.substring(7);
String result = start + "****" + end;
System.out.println(result);
}
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=3056:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringTest
131****9468
Process finished with exit code 0
8.2、身份證號碼信息查看
package stringdemo;
public class StringTest {
public static void main(String[] args) {
String id = "321281202308131234";
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 + "日");
char gender = id.charAt(16);
//利用ASCII碼表
//'0' --> 48 48-48=0
//'1' --> 49 49-48=1
//'2' --> 50 50-48=2
//'3' --> 51 51-48=3
//'4' --> 52 52-48=4
//'5' --> 53 53-48=5
//'6' --> 54 54-48=6
//'7' --> 55 55-48=7
//'8' --> 56 56-48=8
//'9' --> 57 57-48=9
int num = gender - 48;
if (num % 2 == 0) {
System.out.println("性別為:女");
} else {
System.out.println("性別為:男");
}
}
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=2804:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringTest
人物信息為:
出生年月日:2023年08月13日
性別為:男
Process finished with exit code 0
8.3、敏感詞替換
package stringdemo;
public class StringTest {
public static void main(String[] args) {
String talk = "你玩的真好,SB以后不要再玩了,TMD";
String[] arr = {"TMD", "CMD", "SB", "MLGB"};
for (int i = 0; i < arr.length; i++) {
talk = talk.replace(arr[i], "***");
}
System.out.println(talk);
}
}
D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=3940:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Exception stringdemo.StringTest
你玩的真好,***以后不要再玩了,***
Process finished with exit code 0
???文章來源:http://www.zghlxwxcb.cn/news/detail-645022.html
???文章來源地址http://www.zghlxwxcb.cn/news/detail-645022.html
到了這里,關于String(字符串)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!
本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!