Java基础学习Day09--字符串
Java基礎(chǔ)學(xué)習(xí)Day09--字符串
- 一、簡介:
- 二、String類字符串
- 三、String字符串的存儲原理
- 四、字符串常用方法
- 1.equals()方法
- 2.字符串的搜索
- 3.截取子字符串
- 4.去除首尾空白字符串
- 5.替換字符串
- 6.分割字符串
- 7.拼接字符串
- 8.格式化字符串
- 9.類型轉(zhuǎn)換
- 10.轉(zhuǎn)換為char[]字符數(shù)組
- 五、StringBuffer與StringBuilder
- 1.StringBuffer對象
- 2.StringBuilder對象
- 3.總結(jié)
今天把昨天遺留的問題解決了
今天學(xué)習(xí)了字符串相關(guān)的內(nèi)容
一、簡介:
字符串(String)是用一對雙引號括起來的零個或多個字符組成的有限序列。在Java中,字符串被當(dāng)作對象來處理。
程序中需要用到的字符串可以分為兩大類:
(1)String類:創(chuàng)建之后不會再做修改和變動的字符串常量;
(2)StringBuffer類:創(chuàng)建之后允許再做更改和變化的字符串變量。
串的兩種最基本的存儲方式是順序存儲方式和鏈接存儲方式。
二、String類字符串
字符串變量必須賦值后才可以使用,這稱為字符串對象初始化。
#字符串的創(chuàng)建和賦值的方式有三種
(1)String 字符串變量名; 字符串變量名="字符串常量"; String username=""; username="Tom" (2)String 字符串變量名="字符串常量"; String SayHello="Hello world"; (3)String studentName=new String("周杰杰")三、String字符串的存儲原理
(1)String表示字符串類型,屬于引用數(shù)據(jù)類型。
(2)在java中隨便使用雙引號括起來的都是String對象。
例如:“abc”, “def”, “hello world”,這是3個字符串對象。
(3)java中規(guī)定,雙引號括起來的字符串,是不可改變的,final修飾的,自出生到銷毀都是不可改變的。
(4)在JDK當(dāng)中,雙引號括起來的字符串,如:“abc”, "xyz"都是直接存儲在“方法區(qū)”的“字符串常量池”當(dāng)中的。
(5)為什么SUN公司把字符串存在一個“字符串常量池”當(dāng)中呢?
因?yàn)樽址趯?shí)際開發(fā)中使用太過頻繁,為了提高執(zhí)行效率,所以把字符串放到方法區(qū)的字符串常量池當(dāng)中。
樣例:
public class Test01 {public static void main(String[] args) {//下面兩行代碼創(chuàng)建了3個字符串對象,都在常量池當(dāng)中String s1 = "abcdef"; //在字符串常量池當(dāng)中有一個"abcdef"對象String s2 = "abcdef" + "xy"; //因?yàn)橐呀?jīng)有了"abcdef"對象,不需要再創(chuàng)建,而是創(chuàng)建"xy"對象,再拼接計算,創(chuàng)建"abcdefxy"對象String s3 = new String("xy");//這句代碼使用了new關(guān)鍵字。代碼中的"xy"是從哪里來的?//new關(guān)鍵字是實(shí)例化對象的,存在堆內(nèi)存當(dāng)中,而"xy"是在方法區(qū)的字符串常量池當(dāng)中//所以,棧中main()方法棧幀中的局部變量s3保存的是一個堆內(nèi)存對象的地址,堆中對象保存的是常量池"xy"的內(nèi)存地址//凡是雙引號括起來的都在常量池當(dāng)中,凡是new實(shí)例化的對象都在堆內(nèi)存當(dāng)中} }總結(jié):
(1)雙引號括起來的字符串,如:“abc”, "xyz"都是直接存儲在“方法區(qū)”的“字符串常量池”當(dāng)中的。
(2)new關(guān)鍵字實(shí)例化的對象都存在堆當(dāng)中。
四、字符串常用方法
1.equals()方法
常用于比較兩個字符串是否相等,返回值類型是boolean,參數(shù)是Object類
public class test {public static void main(String[] args) {String n1 = "saf";String n2 = "saf";System.out.println(n1.equals(n2)); // true} }2.字符串的搜索
①indexOf()方法:使用indexOf方法可以從字符串的首部進(jìn)行搜索,當(dāng)前字符串中指定子字符串的下標(biāo)位置,返回值為int類型,如果存在,則返回子字符串的下標(biāo)位置。如果不存在,則返回-1。
“Hello”.indexOf(“l(fā)”); // 2
②lastIndexOf()方法:lastIndexOf()方法是從字符串的尾部進(jìn)行搜索,返回值與indexOf()方法一致
“Hello”.lastIndexOf(“l(fā)”); // 3
③startsWith()方法:用于判斷字符串是否以指定字符串開頭,返回值為boolean類型
“Hello”.startsWith(“He”); // true
④endWith()方法:用于判斷字符串是否以指定字符串結(jié)尾,返回值為boolean類型
“Hello”.endsWith(“l(fā)o”); // true
⑤contains()方法:用于查找當(dāng)前字符串中是否存在指定子字符串,返回值為boolean類型
“Hello”.contains(“l(fā)o”); // true
3.截取子字符串
①substring()方法:使用substring()方法可以從當(dāng)前字符串中,截取指定下標(biāo)區(qū)間的子字符串,參數(shù)是int,返回值是String類型
“大漠孤煙直”.substring(2); // 孤煙直
“大漠孤煙直”.substring(0,2); // 大漠
4.去除首尾空白字符串
①trim()方法:trim()方法可以移除字符串首尾空白字符,空白字符包括空格,\t,\n,\r.無參數(shù),返回值類型是 String。
" \tHello\r\n ".trim(); // 返回 “Hello”
5.替換字符串
①replace()方法:根據(jù)字符或字符串替換
String s = "hello"; s.replace('l', 'w'); // "hewwo",所有字符'l'被替換為'w' s.replace("ll", "~~"); // "he~~o",所有子串"ll"被替換為"~~"②replaceAll()方法:通過正則表達(dá)式,把匹配的子字符串統(tǒng)一替換
String s = "A,,B;C ,D"; s.replaceAll("[\\,\\;\\s]+", ","); // "A,B,C,D"6.分割字符串
①split()方法:通過正則表達(dá)式傳入值,參數(shù)值為字符串類型,返回值類型是字符串?dāng)?shù)組
String s = "A,B,C,D"; String[] ss = s.split("\\,"); // {"A", "B", "C", "D"}7.拼接字符串
①join()方法:拼接字符串使用靜態(tài)方法join(),他用指定的字符串連接字符串?dāng)?shù)組
String[] arr = {"A", "B", "C"}; String s = String.join("***", arr); // "A***B***C"8.格式化字符串
①format()方法:fomat()靜態(tài)方法,可以傳入其他參數(shù),替換占位符,然后生成新的字符串。參數(shù)是字符串和動態(tài)參數(shù),返回值是字符串類型
String s = "Hi %s, your score is %d!"; System.out.println(s.format("Alice", 80)); // 字符串對象調(diào)用 System.out.println(String.format("Hi %s, your score is %.2f!", "Bob", 59.5)); // 字符串類調(diào)用9.類型轉(zhuǎn)換
①valueOf()方法:是靜態(tài)方法,可以把任意基本類型或引用類型轉(zhuǎn)換為字符串,這是一個重載方法,編譯器會根據(jù)參數(shù)自動選擇合適的方法。返回值是String類型
String.valueOf(123); // "123" String.valueOf(45.67); // "45.67" String.valueOf(true); // "true" String.valueOf(new Object()); // 類似java.lang.Object@636be97c②parseInt()方法:把字符串轉(zhuǎn)為int類型,參數(shù)是String類型,返回值是int類型
int n1 = Integer.parseInt("123"); // 123 int n2 = Integer.parseInt("ff", 16); // 按十六進(jìn)制轉(zhuǎn)換,255③parseBoolean()方法:把字符串轉(zhuǎn)為boolean類型,參數(shù)是int類型,返回值是boolean類型
boolean b1 = Boolean.parseBoolean("true"); // true boolean b2 = Boolean.parseBoolean("FALSE"); // false10.轉(zhuǎn)換為char[]字符數(shù)組
①String和char[]類型可以互相轉(zhuǎn)化,方法是
char[] cs = "Hello".toCharArray(); // String -> char[] String s = new String(cs); // char[] -> String②修改char[]的時候,String里面的值不會變,因?yàn)閚ew String() 的時候指向了一個新的內(nèi)存空間
char[] cs = "Hello".toCharArray(); String s = new String(cs); System.out.println(s); cs[0] = 'X';五、StringBuffer與StringBuilder
由于 String存放字符的數(shù)組是被final修飾的,只能被賦值一次,不能修改,因此String字符串在每次連接時都需要構(gòu)建新的String對象,既費(fèi)時又浪費(fèi)空間;在需要多次進(jìn)行字符串拼接時,使用 StringBuffer 或 StringBuilder 類更為合適一些;
1.StringBuffer對象
代表一個字符序列可變的字符串,當(dāng)一個StringBuffer被創(chuàng)建以后,通過StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改變這個字符串對象的字符序列。一旦通過StringBuffer生成了最終想要的字符串,就可以調(diào)用它的toString()方法將其轉(zhuǎn)換為一個String對象。StringBuffer類中的方法都添加了synchronized關(guān)鍵字,也就是給這個方法添加了一個鎖,用來保證線程安全。
2.StringBuilder對象
StringBuilder類也代表可變字符串對象。實(shí)際上,StringBuilder和StringBuffer基本相似,兩個類的構(gòu)造器和方法也基本相同。不同的是:StringBuffer是線程安全的,而StringBuilder則沒有實(shí)現(xiàn)線程安全功能,所以性能略高。
3.總結(jié)
效率 :StringBuilder > StringBuffer
安全 :StringBuffer > StringBuilder
在更改次數(shù)較少時考慮使用 String;
在單線程大量操作數(shù)據(jù)時,考慮使用 StringBuilder ;
在多線程大量操作數(shù)據(jù)時,考慮使用 StringBuffer ;
明天會更好
總結(jié)
以上是生活随笔為你收集整理的Java基础学习Day09--字符串的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微博修改域名的服务器,新浪微博个性域名是
- 下一篇: 当当网商品详情API接口(当当商品详情接