字符串String

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);

? ? }

相應(yīng)的內(nèi)存圖

(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);

? ? }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容