java.lang.String類代表字符串
程序中所有的雙引號字符串,都是String類的對象。
? (1)? ?字符串特點(diǎn):
????????字符串內(nèi)容永不改變
????????正是因?yàn)樽址豢筛淖?,所以字符串是可以共享使?/p>
????????字符串效果上相當(dāng)于是char[]字符數(shù)組,但是底層原理是byte[]字節(jié)數(shù)組。
? ?(2)創(chuàng)建字符串的常見3+1種方式:
????????三種構(gòu)造方法:
? ? ? ? ? ? public String():創(chuàng)建空白字符串,不含任何內(nèi)容。
? ? ? ? ? ? public String(char[] array):根據(jù)字符數(shù)組的內(nèi)容,來創(chuàng)建對應(yīng)的字符串。
? ? ? ? ? ?public? String(byte[] array):根據(jù)字節(jié)數(shù)組的內(nèi)容,來創(chuàng)建對應(yīng)的字符串。
????????????一種直接創(chuàng)建: String str = "Hello";
public class Demo03String {
????public static void main(String[] args) {
????????//使用空參構(gòu)造
? ? ? ? String str1 =new String();
? ? ? ? System.out.println("第一個(gè)字符串:" + str1);
? ? ? ? //使用字符數(shù)組創(chuàng)建字符串
? ? ? ? char[] charArray = {'A', 'B', 'C'};
? ? ? ? String str2 =new String(charArray);
? ? ? ? System.out.println("第二個(gè)字符串:"+ str2);
? ? ? ? //根據(jù)字節(jié)數(shù)組創(chuàng)建字符串
? ? ? ? byte[] byteArra = {97, 98, 99};
? ? ? ? String str3 =new String(byteArra);
? ? ? ? System.out.println("第三個(gè)字符串:"+ str3);
? ? }
}
(3)字符串常量池:程序當(dāng)中直接寫上的雙引號字符串,就在字符串常量池中。
????對于基本類型來說,==是進(jìn)行數(shù)值的比較。對于引用類型來說,==是進(jìn)行地址值的比較
public class Demo03StringPool {
????public static void main(String[] args) {
????????String str1 ="abc";
? ? ? ? String str2 ="abc";
? ? ? ? char[] charArray = {'a','b','c'};
? ? ? ? String str3 =new String(charArray);
? ? ? ? System.out.println(str1==str2);
? ? ? ? System.out.println(str1==str3);
? ? ? ? System.out.println(str3==str2);
? ? }

(4)==是進(jìn)行對象的地址值比較,如果確實(shí)需要字符串的內(nèi)容比較,可以使用兩個(gè)方法:
* public boolean equals(Object obj):參數(shù)可以是任何對象
????????注意事項(xiàng):
????????????1,任何對象都能用Object進(jìn)行接收。
? ? ? ? ? ? 2,equals方法具有對稱性,也就是a.equals(b)和b.equals(a)效果一樣
????????????3,如果比較雙方一個(gè)常量一個(gè)變量,推薦把常量字符串寫在前邊
* public boolean equalsIgnoreCase(String str):忽略大小寫,進(jìn)行內(nèi)容比較。
public class Demo03StringEquals {
????public static void main(String[] args) {
????????String str1 ="Hello";
? ? ? ? String str2 ="Hello";
? ? ? ? char[] charArray = {'H', 'e', 'l', 'l', 'o'};
? ? ? ? String str3 =new String(charArray);
? ? ? ? System.out.println(str1.equals(str2));//true
? ? ? ? System.out.println(str2.equals(str3));//true
? ? ? ? System.out.println("====");
? ? ? ? String str4 =null;
? ? ? ? System.out.println("abc".equals(str4));//推薦:false
????????System.out.println(str4.equals("abc"));//不推薦:報(bào)錯(cuò),空指針異常NullPointerException
? ? ? ? System.out.println("====");
? ? ? ? String strA ="Java";
? ? ? ? String strB ="java";
? ? ? ? System.out.println(strA.equals(strB));//false,嚴(yán)格區(qū)分大小寫
? ? ? ? System.out.println(strA.equalsIgnoreCase(strB));//true,忽略大小寫
? ? }
}
(5)String中與獲取相關(guān)的常用方法有:
? ? ? ? ? ? public int length():獲取字符串當(dāng)中含有的字符個(gè)數(shù),拿到字符串長度。
? ? ? ? ? ? public String concat(String str):將當(dāng)前字符串和參數(shù)字符串拼接成為返回值新的字符串。
? ? ? ? ? ? public char charAt(int index):獲取指定索引位置的單個(gè)字符(索引從0開始。
? ? ? ? ? ? public int indexOf(String str):查找參數(shù)字符串在本字符串當(dāng)中首次出現(xiàn)的索引位置,如果沒有返回-1值。
public class Demo03StringGet {
????public static void main(String[] args) {
????????//獲取字符串的長度
? ? ? ? int length ="abcdefghijklmnopqrstuvwxyz".length();
? ? ? ? System.out.println("字符串的長度為:" + length);
? ? ? ? //拼接字符串
? ? ? ? String str1 ="Hello";
? ? ? ? String str2 ="World";
? ? ? ? String str3 = str1.concat(str2);
? ? ? ? System.out.println(str3);
? ? ? ? System.out.println("====");
? ? ? ? //獲取索引位置的單個(gè)字符
? ? ? ? char ch ="Hello".charAt(1);
? ? ? ? System.out.println("在一號索引位置的字符是:" + ch);
? ? ? ? System.out.println("====");
? ? ? ? //查找參數(shù)字符串在本來字符串中出現(xiàn)的第一次索引位置
? ? ? ? String original ="HelloWorld";
? ? ? ? System.out.println(original.indexOf("llo"));
? ? }
}
(6)字符串的截取方法:
? ? public String substring(int index):截取從參數(shù)位置一直到字符串末尾,返回新字符串。
? ? public String substring(int begin, int end):截取從begin開始,一直到end結(jié)束,中間的字符串。
? ? 備注:[begin, end)
? ??????public class Demo03SubString {
????????????public static void main(String[] args) {
????????????String str1 ="HelloWorld";
? ? ? ? ????String str2 = str1.substring(5);
? ? ? ????? System.out.println(str1);//HelloWorld
? ? ? ? ????System.out.println(str2);//World
? ? ? ????? System.out.println("====");
? ? ? ????? String str3 = str1.substring(4, 7);//oWo
? ? ? ? ????System.out.println(str3);????
? ? ? ????? System.out.println("===");
? ? ? ? /**
????????* 下邊這種寫法,字符串的內(nèi)容依然沒有改變,下邊有兩個(gè)字符串"Hello", "Java"
????????* str當(dāng)中國保存的是地址值
????????* 本來地址值是Hello的0x666
????????* 后來地址值變成了Java的0x999
????????*/
? ? ? ? String strA ="Hello";
? ? ? ? System.out.println(strA);//Hello
? ? ? ? strA ="Java";
? ? ? ? System.out.println(strA);//Java
? ? }
}
(7)String當(dāng)中與轉(zhuǎn)換相關(guān)的常用方法有:
? ? ? ? public char[] toCharArray():將當(dāng)前字符串拆非為字符數(shù)組作為返回值。
? ? ? ? public byte[] getBytes():獲得房前字符串底層的字節(jié)數(shù)組。
? ? ? ? public String replace(CharSequence oldString, CharSequence newString):將所有出現(xiàn)的老字符串替換為新的字符串,返回替換之后的結(jié)果新字符串。
? ? ? ? 備注:CharSequence意思是可以接收字符串類型
? ??public class Demo03StringConvert {
????public static void main(String[] args) {
????????//轉(zhuǎn)換為字符數(shù)組
? ? ? ? char[] chars ="Hello".toCharArray();
? ? ? ? System.out.println(chars[0]);//H
? ? ? ? System.out.println(chars.length);//5
? ? ? ? System.out.println("====");
? ? ? ? //轉(zhuǎn)換為字節(jié)數(shù)組
? ? ? ? byte[] bytes ="abc".getBytes();
? ? ? ? for (int i =0; i < bytes.length; i++) {
????????????System.out.println(bytes[i]);
? ? ? ? }
????????System.out.println("====");
? ? ? ? //字符串的內(nèi)容替換
? ? ? ? String str1 ="How do you do?";
? ? ? ? String str2 = str1.replace("o", "*");
? ? ? ? System.out.println(str1);//How do you do?
? ? ? ? System.out.println(str2);//H*w d* y*u d*?
? ? }
}
(8)分割字符串的方法:
public String[] split(String regex):按照參數(shù)的規(guī)則,將字符串切分為若干部分。
注意事項(xiàng):split方法的參數(shù)其實(shí)是一個(gè)正則表達(dá)式,如果按照英文句點(diǎn)“.”進(jìn)行切分,必須寫“\\.”
public class Demo03StringSplit {
????public static void main(String[] args) {
????????String str1 ="aaa,bbb,ccc";
? ? ? ? String[] array1 = str1.split(",");
? ? ? ? for (int i =0; i < array1.length; i++) {
????????????System.out.println(array1[i]);
? ? ? ? }
}
}
(9)
/**
* 題目:定義一個(gè)方法,把數(shù)組{1,2,3}按照指定格式拼接成一個(gè)字符串。格式按照如下:[word1#word2#word3]。
* 分析:
*? 1,首先準(zhǔn)備一個(gè)int[]數(shù)組,內(nèi)容是1,2,3
*? 2,定義一個(gè)方法,用來將數(shù)組變?yōu)樽址?/p>
*? ? ? 返回值類型:String
*? ? ? 方法名稱:fromArrayToString
*? ? ? 參數(shù)列表:int[]
*? 3,格式:[word1#word2#word3]
*? ? ? 用到:for循環(huán)、字符拼接、每個(gè)數(shù)組前邊都有word滋養(yǎng)、分割使用的是#、區(qū)分一下是不是最后一個(gè)
*? 4,調(diào)用方法,得到返回值,并打印結(jié)果字符串
*/
public class Demo03StringPractice {
????public static void main(String[] args) {
????????int[] array = {1, 2, 3};
? ? ? ? String result =fromArrayToString(array);
? ? ? ? System.out.println(result);
? ? }
public static StringfromArrayToString(int[] array){
????????String str ="[";
? ? ? ? for (int i =0; i < array.length; i++) {
????????????if (i == array.length -1){
????????????????str +="word" + array[i] +"]";
? ? ? ? ? ? }else{
????????????????str +="word" + array[i] +"#";
? ? ? ? ? ? }
}
return str;
? ? }
}
import java.util.Scanner;
/**
* 題目:鍵盤輸入一個(gè)字符串,并且統(tǒng)計(jì)其中各種字符出現(xiàn)的次數(shù)。種類有:大寫字母、小寫字母、數(shù)字、其他
* 分析:
*? 1,既然用到鍵盤輸入,肯定是Scanner
*? 2,鍵盤輸入的是字符串,那么:String str = sc.next();
*? 3,定義四個(gè)變量,分別代表四中字符各自的出現(xiàn)次數(shù)。
*? 4,需要對字符串的一個(gè)字,一個(gè)字檢查,String-->char[],方法就是toCharArray()
*? 5,遍歷char[]字符數(shù)組,對當(dāng)前字符的種類進(jìn)行判斷,并且用四個(gè)變量進(jìn)行++運(yùn)算。
*? 6,打印輸出四個(gè)變量,分別代表四種字符出現(xiàn)次數(shù)。
*/
public class DemoStringCount {
????public static void main(String[] args) {
????????Scanner sc =new Scanner(System.in);
? ? ? ? System.out.println("請輸入一個(gè)字符串:");
? ? ? ? String input = sc.next();
? ? ? ? int countUpper =0;
? ? ? ? int countLower =0;
? ? ? ? int countNumber =0;
? ? ? ? int countOther =0;
? ? ? ? char[] charArray = input.toCharArray();
? ? ? ? for (int i =0; i < charArray.length; i++) {
????????????char ch = charArray[i];
? ? ? ? ? ? if('A' <= ch && ch <='Z'){
????????????????countUpper++;
? ? ? ? ? ? }else if ('a' <= ch && ch <='z'){
????????????????countLower++;
? ? ? ? ? ? }else if ('0' <= ch && ch <='9'){
????????????????countNumber++;
? ? ? ? ? ? }else{
????????????????countOther++;
? ? ? ? ? ? }
}
????????System.out.println("大寫字母有:"+countUpper);
? ? ? ? System.out.println("小寫字母有:"+countLower);
? ? ? ? System.out.println("數(shù)字有:"+countNumber);
? ? ? ? System.out.println("其他有:"+countOther);
? ? }
}