1.1 String類概述
??通過JDK提供的API蹬屹,查看String類的說明
- "abc"是String類的一個實例,或者成為String類的一個對象
- 字符串字面值"abc"也可以看成是一個字符串對象
- 字符串是常量匿级,一旦被賦值空镜,就不能被改變
- 字符串本質是一個字符數(shù)組
1.2 String類的構造方法
-
String(String original):
- 把字符串數(shù)據(jù)封裝成字符串對象
-
String(char[] value):
- 把字符數(shù)組的數(shù)據(jù)封裝成字符串對象
-
String(char[] value, int index, int count):
- 把字符數(shù)組的一部分數(shù)據(jù)封裝成字符串對象
1.2.1 常用構造方法演示
package com.itheima_01;
/*
* String:代表字符串類。
* 由多個字符組成的一串數(shù)據(jù)咳焚。
* 字符串的本質就是一個字符數(shù)組洽损。
*
* 構造方法:
* String(String original):把字符串數(shù)據(jù)封裝成字符串對象
* String(char[] value):把字符數(shù)組的數(shù)據(jù)封裝成字符串對象
* String(char[] value, int index, int count):把字符數(shù)組的一部分數(shù)據(jù)封裝成字符串對象
*
* public String toString():返回此對象本身(它已經(jīng)是一個字符串!)革半。
*/
public class StringDemo {
public static void main(String[] args) {
//String(String original):把字符串數(shù)據(jù)封裝成字符串對象
String s1 = new String("hello");
System.out.println(s1);
System.out.println("----------");
//String(char[] value):把字符數(shù)組的數(shù)據(jù)封裝成字符串對象
char[] value = {'h','e','l','l','o'};
String s2 = new String(value);
System.out.println(s2);
System.out.println("----------");
//String(char[] value, int index, int count):把字符數(shù)組的一部分數(shù)據(jù)封裝成字符串對象
//String s3 = new String(value,0,value.length);
String s3 = new String(value,0,3);
System.out.println(s3);
System.out.println("----------");
//最常用的
String s4 = "hello";
System.out.println(s4);
}
}
1.2.2 創(chuàng)建字符串對象兩種方式的區(qū)別
package com.itheima_02;
/*
* String類創(chuàng)建對象的特點:
* A:通過構造方法創(chuàng)建對象
* B:通過直接賦值的方式創(chuàng)建對象
* 這兩種方式的創(chuàng)建是有區(qū)別的碑定。
* 通過構造方法創(chuàng)建的字符串對象是在堆內存。
* 通過直接賦值的方式創(chuàng)建的字符串對象是在方法區(qū)的常量池又官。
*/
public class StringDemo {
public static void main(String[] args) {
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = "hello";
String s4 = "hello";
System.out.println(s1 == s2);//false
System.out.println(s1 == s3);//false
System.out.println(s3 == s4);//true
}
}
1.3String 的練習之模擬用戶登錄
- boolean equals(Object obj):
- 比較字符串的內容是否相同
- boolean equalsIgnoreCase(String str):
- 比較字符串的內容是否相同,忽略大小寫
1.3.1 模擬用戶登錄演示
??需求:模擬登錄,給三次機會,并提示還有幾次
1.3.1.1案例代碼
package com.itheima_03;
import java.util.Scanner;
/*
* 需求:模擬登錄,給三次機會,并提示還有幾次
* 分析:
* A:定義兩個字符串對象延刘,用于存儲已經(jīng)存在的用戶名和密碼
* B:鍵盤錄入用戶名和密碼
* C:拿鍵盤錄入的用戶名和密碼去跟已經(jīng)存在的用戶名和密碼進行比較
* 如果內容相同,就提示登錄成功
* 如果內容不同六敬,就提示登錄失敗碘赖,并提示還有幾次機會
* public boolean equals(Object anObject):比較字符串的內容,嚴格區(qū)分大小寫(用戶名和密碼)
* public boolean equalsIgnoreCase(String anotherString):比較字符串的內容外构,不考慮大小寫(驗證碼)
*/
public class StringTest {
public static void main(String[] args) {
//定義兩個字符串對象普泡,用于存儲已經(jīng)存在的用戶名和密碼
String username = "admin";
String password = "admin";
for(int x=0; x<3; x++) {
//鍵盤錄入用戶名和密碼
Scanner sc = new Scanner(System.in);
System.out.println("請輸入用戶名:");
String name = sc.nextLine();
System.out.println("請輸入密碼:");
String pwd = sc.nextLine();
//拿鍵盤錄入的用戶名和密碼去跟已經(jīng)存在的用戶名和密碼進行比較
if(username.equals(name) && password.equals(pwd)) {
System.out.println("登錄成功");
break;
}else {
if((2-x) == 0){
System.out.println("你的帳號被鎖定,請與管理員聯(lián)系");
}else {
System.out.println("登錄失敗典勇,你還有"+(2-x)+"次機會");
}
}
}
}
}
1.4 String類的獲取功能
- public char charAt(int index):返回指定索引處的值
- public int length():返回字符串中的字符個數(shù),字符串的長度
1.4.1 遍歷字符串的演示
package com.itheima_03;
/*
* 需求:遍歷字符串(獲取字符串中的每一個字符)
*/
public class StringTest2 {
public static void main(String[] args) {
//要遍歷字符串叮趴,你首先得有一個字符串
String s = "abcde";
//思考:如何獲取字符串中的每一個字符
//假如讓我們來提供方法割笙,我們應該提供一個根據(jù)索引返回指定位置的字符的方法
//返回值:char
//形式參數(shù):int index
//public char charAt(int index):返回指定索引處的值
//原始做法
System.out.println(s.charAt(0));
System.out.println(s.charAt(1));
System.out.println(s.charAt(2));
System.out.println(s.charAt(3));
System.out.println(s.charAt(4));
System.out.println("-------------------");
//用for循環(huán)改進
for(int x=0; x<5; x++) {
System.out.println(s.charAt(x));
}
System.out.println("-------------------");
//目前for循環(huán)中的數(shù)據(jù)5是我們數(shù)出來的,那么字符串有沒有提供一個方法眯亦,用于獲取字符串中字符的個數(shù)呢?
//public int length():返回字符串中的字符個數(shù)伤溉,字符串的長度
for(int x=0; x<s.length(); x++) {
System.out.println(s.charAt(x));
}
}
}
1.5對字符串的拼接案例
package com.itheima_03;
/*
* 需求:把數(shù)組中的數(shù)據(jù)按照指定個格式拼接成一個字符串
* 舉例:int[] arr = {1,2,3};
* 輸出結果:[1, 2, 3]
*
* 分析:
* A:定義一個int類型的數(shù)組
* B:寫方法實現(xiàn)把數(shù)組中的元素按照指定的格式拼接成一個字符串
* C:調用方法
* D:輸出結果
*/
public class StringTest3 {
public static void main(String[] args) {
//定義一個int類型的數(shù)組
int[] arr = {1,2,3};
//寫方法實現(xiàn)把數(shù)組中的元素按照指定的格式拼接成一個字符串
//調用方法
String result = arrayToString(arr);
//輸出結果
System.out.println("result:"+result);
}
/*
* 兩個明確:
* 返回值類型:String
* 參數(shù)列表:int[] arr
*/
public static String arrayToString(int[] arr) {
String s = "";
//[1, 2, 3]
s+="[";
for(int x=0; x<arr.length; x++) {
if(x==arr.length-1) {
s += arr[x];
}else {
s += arr[x];
s += ", ";
}
}
s+="]";
return s;
}
}
1.6 String 類的反轉案例
package com.itheima_03;
import java.util.Scanner;
/*
* 需求:字符串反轉
* 舉例:鍵盤錄入”abc”
* 輸出結果:”cba”
*
* 分析:
* A:鍵盤錄入字符串數(shù)據(jù)
* B:寫方法實現(xiàn)字符串數(shù)據(jù)的反轉
* 把字符串倒著遍歷,在把每一個得到的字符拼接成一個字符串
* C:調用方法
* D:輸出結果
*/
public class StringTest4 {
public static void main(String[] args) {
//鍵盤錄入字符串數(shù)據(jù)
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個字符串:");
String s = sc.nextLine();
//寫方法實現(xiàn)字符串數(shù)據(jù)的反轉
//調用方法
String result = reverse(s);
//輸出結果
System.out.println("result:"+result);
}
/*
* 兩個明確:
* 返回值類型:String
* 參數(shù)列表:String s
*/
public static String reverse(String s) {
//把字符串倒著遍歷妻率,在把每一個得到的字符拼接成一個字符串
String ss = "";
for(int x=s.length()-1; x>=0; x--) {
ss += s.charAt(x);
}
return ss;
}
}