Java深入淺出講解String類常見方法
1.定義字符串
字符串常見的構(gòu)造方式如下:
String s1 = "with"; String s2 = new String("with"); char[] array = {'w','i','t','h'}; String s3 = new String(array);
2.字符串的存儲
由于String是引用類型,所以變量存儲的并不是字符串本身,而是地址
我們首先來看看String的源碼
可以看到:String類中只有兩個成員變量,其中value是字符數(shù)組,所以定義的字符串是由value數(shù)組進(jìn)行接收的,據(jù)此可大致推出字符串的存儲,如下圖:
3.String中常用的方法
3.1字符串的比較
equals(Object anObject) | 比較字符串內(nèi)容是否相同,返回值為布爾值 |
equalsIgnoreCase(Object anObject) | 功能同equals(),不同的是此方法忽略字母的大小寫 |
compareTo(String s) | 比較字符串內(nèi)容,返回值為int |
compareToIgnoreCase(String str) | 同compareTo(),忽略字母大小寫 |
3.2查找字符串
charAt(int index) | 返回下標(biāo)為index處的字符,index越界會拋出異常 |
int indexOf(int ch) | 此方法是重載方法,有多個結(jié)構(gòu),功能是返回變量ch第一次在字符串中出現(xiàn)的位置,沒有的話返回-1 |
int indexOf(int ch,int fromlndex) | 從fromlndex位置開始向后找ch第一次出現(xiàn)的位置 |
int lastIndexOf(int ch) | 同樣是重載方法,從字符串末尾開始往前面找ch第一次出現(xiàn)的位置,沒有返回-1,和index一樣也有fromlndex參數(shù) |
3.3轉(zhuǎn)換字符串
String valueOf(int i) | 將數(shù)字轉(zhuǎn)換為字符串,這是個重載方法 字符串轉(zhuǎn)數(shù)字的方法有parseInt()、parseDouble()等,不過不在String類中,在各自的包裝類里面 |
String toUpperCase() | 小寫字母轉(zhuǎn)換為大寫 大寫轉(zhuǎn)小寫的方法為 toLowerCase() |
char[] toCharArray() | 字符串轉(zhuǎn)為字符數(shù)組 |
String format() | 創(chuàng)建格式化的字符串 |
String replaceAll(String regex,String replacement) | 替換字符串中所有的指定內(nèi)容 替換字符使用的是replace,返回值也是String |
String replaceFirst(String regex,String replacement) | 替換字符串首個指定內(nèi)容 |
String[] split(String regex) | 重載方法,將字符串按照指定格式進(jìn)行拆分,可指定拆分成多少組 |
String substring(int beginIndex) | 重載方法,截取字符串內(nèi)容,可以指定結(jié)尾的位置,取值范圍是左開右閉 |
String trim() | 去掉字符串的左右空格 |
字符串拆分需要有幾點(diǎn)注意:
- 如果要按照“|”、“*”、“+”拆分,字符前需要加上轉(zhuǎn)義字符“\\”
- 如果是“\”,則需要寫成“\\\\”
- 字符串有多個分隔符,可以使用“|”作為連字符
特別說明:
Java中字符串是不可變的,所有的對字符串本身的操作都會產(chǎn)生新的對象
至于字符串為什么不可變
因為String源碼中value數(shù)組被private和final修飾,final修飾,數(shù)組的指向?qū)ο蟛豢勺?,private修飾,在類外就無法訪問,而且String中沒有提供getValue和setValue方法
4.StringBuilder和StringBuffer
因為String操作字符串會產(chǎn)生新的對象,所以Java中提供了這兩個類,這兩個類的大部分功能都是類似的,String、StringBuilder、StringBuffer之間的區(qū)別如下:
- String內(nèi)容不可變,StringBuilder和StringBuffer內(nèi)容可變
- StringBuffer采用同步處理,屬于線程安全操作,StringBuilder則不是
這里列出一些常用的方法:
StringBuffer deleteCharAt(int index) | 刪除index位置字符 |
StringBuffer delete(int start, int end) | 刪除[start, end)區(qū)間內(nèi)的字符 |
StringBuffer replace(int start, int end,String str) | 將[start, end)位置的字符替換為str |
String substring(int start) | 從start開始一直到末尾的字符以String的方式返回 |
String substring(int start,int end) | 將[start, end)范圍內(nèi)的字符以String的方式返回 |
StringBuffer reverse() | 反轉(zhuǎn)字符串 |
String toString() | 將所有字符按照String的方式返回 |
5.常量池
為使程序運(yùn)行的更快,同時也為了節(jié)省內(nèi)存,Java為基本數(shù)據(jù)類型和String都提供了常量池,常量池的位置在堆中,這里只討論字符串常量池
因為常量池的存在,所以會有如下的情況:
常量池本質(zhì)是哈希表,原理這里暫時跳過,只說結(jié)論:
雙引號引起來的元素都存放在常量池里面,有且僅有一份,所以在存放常量的時候,會先去常量池檢查是否存在此常量,存在則直接給地址,不存在才會存放常量
所以s1和s2是指向的常量池中的同一地址,而s3是實(shí)例化一個對象,這個對象指向的是常量池,但s3本身并沒有指向常量池,大致的存儲如下圖:
String類內(nèi)容結(jié)束,完
到此這篇關(guān)于Java深入淺出講解String類常見方法的文章就介紹到這了,更多相關(guān)Java String內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java中String類的常用方法總結(jié)
- Java?String類的理解及字符串常量池介紹
- Java中String類常用方法總結(jié)詳解
- Java基礎(chǔ)之String類使用與字符串比較
- Java中String類常用方法使用詳解
- 帶你一文深入認(rèn)識Java?String類
- Java String類常用方法梳理總結(jié)
- Java詳細(xì)分析String類與StringBuffer和StringBuilder的使用方法
- Java?String類和StringBuffer類的區(qū)別介紹
- Java全面解析string類型的xml字符串
- Java中String類常用類型實(shí)例總結(jié)
- 深入剖析Java中String類的concat方法
- 詳解Java中String類的各種用法
- 一文帶你初識java中的String類
- Java String類的性質(zhì)與比較
- 關(guān)于Java中String類字符串的解析
- Java String類字符串的理解與認(rèn)知
- Java-String類最全匯總(上篇)
相關(guān)文章
spring boot整合jsp及設(shè)置啟動頁面的方法
這篇文章主要給大家介紹了關(guān)于spring boot整合jsp及設(shè)置啟動頁面的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09Spring處理@Async導(dǎo)致的循環(huán)依賴失敗問題的方案詳解
這篇文章主要為大家詳細(xì)介紹了SpringBoot中的@Async導(dǎo)致循環(huán)依賴失敗的原因及其解決方案,文中的示例代碼講解詳細(xì),感興趣的可以學(xué)習(xí)一下2022-07-07解讀springboot配置mybatis的sql執(zhí)行超時時間(mysql)
這篇文章主要介紹了解讀springboot配置mybatis的sql執(zhí)行超時時間(mysql),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01java實(shí)現(xiàn)翻轉(zhuǎn)單詞順序列
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)翻轉(zhuǎn)單詞順序列,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-03-03使用Feign實(shí)現(xiàn)微服務(wù)間文件下載
這篇文章主要為大家詳細(xì)介紹了使用Feign實(shí)現(xiàn)微服務(wù)間文件下載,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-04-04SpringBoot+Shiro學(xué)習(xí)之密碼加密和登錄失敗次數(shù)限制示例
本篇文章主要介紹了SpringBoot+Shiro學(xué)習(xí)之密碼加密和登錄失敗次數(shù)限制示例,可以限制登陸次數(shù),有興趣的同學(xué)可以了解一下。2017-03-03