java學(xué)習(xí)指南之字符串與正則表達(dá)式
String
含義:String是一個(gè)封裝char[]數(shù)組的對(duì)象,字符串不可變
String str = “abc”; 等效于:char[] data = {‘a’, ‘b’, ‘c’};
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence 注意:
- String類被final修飾所以String類不能被繼承
- 所處的包為java.lang,使用時(shí)無(wú)需導(dǎo)包
- 字符串一旦創(chuàng)建,長(zhǎng)度不可改變
構(gòu)造方法
String(char[] value,int m,int n):截取value數(shù)組從下標(biāo)m開(kāi)始,截取n個(gè)字符形成字符串
String(char[] value):將字符數(shù)組轉(zhuǎn)化為字符串
String(bytes[] bytes):使用平臺(tái)默認(rèn)字符集解碼指定字節(jié)數(shù)組,形成一個(gè)字符串
String(bytes[] bytes,String charsetname):使用指定字符集解碼指定字節(jié)數(shù)組,形成一個(gè)字符串
String(bytes[] bytes,int m,int n,String charsetname):使用指定字符集解碼指定字節(jié)數(shù)組,并從下標(biāo)m處截取字節(jié),截取n個(gè)最終形成一個(gè)字符串
方式二:String str="abc";
注意
方式二的創(chuàng)建方式如果是第一次使用字符串,java會(huì)在字符串堆中常量池創(chuàng)建一個(gè)對(duì)象;其他方式相當(dāng)于直接創(chuàng)建一個(gè)對(duì)象,若常量池中沒(méi)有則也會(huì)在常量池中創(chuàng)建一個(gè)再次使用相同的內(nèi)容時(shí),會(huì)直接訪問(wèn)堆中常量池中存在的對(duì)象。
格式控制字符串
String a="我";
String b="蛋糕";
String name=String.format("%s喜歡%s", a,b);
System.out.println(name);//字符串可以直接打印常用方法
int hashCode()
返回此字符串的哈希碼。
boolean equals(Object anObject)
將此字符串與指定的對(duì)象比較,比較的是重寫(xiě)后的串的具體內(nèi)容
String toString()
返回此對(duì)象本身(它已經(jīng)是一個(gè)字符串?。?nbsp;
int length()
返回此字符串的長(zhǎng)度。
String toUpperCase()
所有字符都轉(zhuǎn)換為大寫(xiě)。
String toLowerCase()
所有字符都轉(zhuǎn)換為小寫(xiě)
boolean startsWith(String prefix)
測(cè)試此字符串是否以指定的元素開(kāi)頭。
boolean endsWith(String suffix)
測(cè)試此字符串是否以指定的字符串結(jié)束。
char charAt(int index)
返回指定索引/下標(biāo)處的 char 值/字符
int indexOf(String str)
返回指定字符在此字符串中第一次出現(xiàn)處的索引。
int lastIndexOf(String str)
返回指定字符在此字符串中最后一次出現(xiàn)處的索引。
String concat(String str)
將指定字符串連接/拼接到此字符串的結(jié)尾,注意:不會(huì)改變?cè)?br />String[] split(String regex)
根據(jù)給定元素來(lái)分隔此字符串。
String trim()
返回去除首尾空格的字符串
String replace(CharSequence target, CharSequence replacement)
用新字符串replacement替換掉原有的舊的字符串target
byte[] getBytes()
把字符串存儲(chǔ)到一個(gè)新的 byte 數(shù)組中
String substring(int beginIndex)
返回一個(gè)新子串,從指定下標(biāo)處開(kāi)始,包含指定下標(biāo)
String substring(int beginIndex, int endIndex)
返回一個(gè)新子串,從執(zhí)定下標(biāo)開(kāi)始,到結(jié)束下標(biāo)為止,但不包含結(jié)束下標(biāo)
static String valueOf(int i)
把int轉(zhuǎn)成String
char[] toCharArray()
將字符串轉(zhuǎn)成字符數(shù)組
StringBuilder與StringBuffer
特點(diǎn)
- 封裝了char[]數(shù)組
- 是可變的字符序列
- 提供了一組通用的可以對(duì)字符內(nèi)容修改的方法
- 常用append()來(lái)代替字符串做字符串連接”+”
- 內(nèi)部字符數(shù)組默認(rèn)初始容量是16:super(str.length() + 16);
- 如果大于16會(huì)嘗試將擴(kuò)容,新數(shù)組大小原來(lái)的變成2倍+2,容量如果還不夠,直接擴(kuò)充到需要的容量大小。int newCapacity = value.length * 2 + 2;
- StringBuffer 1.0出道線程安全,StringBuilder1.5出道線程不安全
- StringBuffer方法里面有同步關(guān)鍵字,StringBuilder里沒(méi)有
- 在執(zhí)行效率上,StringBuilder > StringBuffer > String
理解可變與不可變
- 不可變:在地址不變的情況下,想讓字符串?dāng)U容是不可能的
- 可變:在stringBuilder/stringbuffer這個(gè)對(duì)象地址不變的情況下,想讓字符串?dāng)U容是可能的,直接追加即可
字符串拼接方法
語(yǔ)法:字符串.append(字符串);
返回值:原字符串
String s = "hello world";
StringBuffer s1 = new StringBuffer();
StringBuffer append = s1.append(s);
System.out.println(s1);//hello world
System.out.println(s1==append);//true字符串刪除方法
語(yǔ)法:字符串.delete(索引1,索引2)
作用:刪除[索引1,索引2)之間所有的字符
返回值:原字符串
StringBuilder s1 = new StringBuilder("hello world");
StringBuilder delete = s1.delete(3, 6);
System.out.println(delete);
System.out.println(s1==delete);//true字符串內(nèi)插入字符
語(yǔ)法:字符串.insert(索引,字符串)
作用:在指定索引的前面追加字符
返回值:原字符串
StringBuffer s1 = new StringBuffer("hello");
StringBuilder s2=new StringBuilder("world");
StringBuffer s = s1.insert(1, "ab");
s2.insert(5, "cd");//在末尾處追加字符串,如果索引為6則報(bào)錯(cuò)
System.out.println(s1);//habello
System.out.println(s1==s);//true
System.out.println(s2);//worldcd字符串替換方法
語(yǔ)法:字符串.replace(索引1,索引2,str字符串)
作用:將字符串內(nèi)[索引1,索引2)內(nèi)所有字符由str字符串替換
返回值:原字符串
StringBuilder s1 = new StringBuilder("hello world");
StringBuilder s2 = s1.replace(3, 6, "no");
System.out.println(s2);
System.out.println(s1==s2);//true字符串反轉(zhuǎn)方法
語(yǔ)法:字符串.reverse()
返回值:原字符串
StringBuffer s1 = new StringBuffer("abc");
StringBuffer reverse = s1.reverse();
System.out.println(s1);//cba
System.out.println(s1==reverse);//true查字符串對(duì)應(yīng)索引處的字符
語(yǔ)法:字符串.charAt(索引)
返回值:對(duì)應(yīng)索引處的字符
StringBuffer s1 = new StringBuffer("hello world");
char c = s1.charAt(6);
System.out.println(c);截取字符串
語(yǔ)法:字符串.substring(索引1,索引2)
返回值:字符串[索引1,索引2)內(nèi)字符組成的字符串
StringBuffer s1 = new StringBuffer("hello world");
String substring = s1.substring(2, 5);
System.out.println(substring);正則表達(dá)式
含義:正確字符串的格式,常用來(lái)判斷用戶輸入的內(nèi)容是否符合格式的要求,注意是嚴(yán)格區(qū)分大小寫(xiě)的。
注意:java字符串正則嚴(yán)格按照順序匹配
正則表達(dá)式符號(hào)表

正則表達(dá)式常用方法
Matches()
語(yǔ)法:字符串.Matches(正則)
作用:判斷當(dāng)前字符串是否匹配正則表達(dá)式,若符合則返回true,否則返回false
返回值:boolean
//身份證號(hào)的規(guī)律:一共是18位,前17位是數(shù)子,第18位有可能是數(shù)字,也有可能是X
String regex = "\\d{17}[0-9X]";
System.out.println("請(qǐng)輸入您的身份證號(hào)");
String s = new Scanner(System.in).nextLine();
boolean matches = s.matches(regex);
System.out.println(matches);replaceAll()
語(yǔ)法:字符串.replaceAll(正則,子串)
作用:將字符串內(nèi)符合正則的內(nèi)容用字串代替
返回值:替換好的字符串
String regex = "\\d[0-9X]";
String s = "he1Xo";
String s1 = s.replaceAll(regex, "ll");
System.out.println(s1);split()
語(yǔ)法:字符串.split(正則)
作用:以字符串內(nèi)符合正則表達(dá)式的內(nèi)容來(lái)拆分字符串
返回值:拆分好的字符串?dāng)?shù)組
String regex = "\\d[0-9X]";
String s = "abc23def0Xghi";
String[] split = s.split(regex);
System.out.println(Arrays.toString(split));//[abc, def, ghi]總結(jié)
到此這篇關(guān)于java學(xué)習(xí)指南之字符串與正則表達(dá)式的文章就介紹到這了,更多相關(guān)java字符串與正則表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot+Mybatis項(xiàng)目使用Redis做Mybatis的二級(jí)緩存的方法
本篇文章主要介紹了SpringBoot+Mybatis項(xiàng)目使用Redis做Mybatis的二級(jí)緩存的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
SpringMVC自定義類型轉(zhuǎn)換器實(shí)現(xiàn)解析
這篇文章主要介紹了SpringMVC自定義類型轉(zhuǎn)換器實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
解決springboot啟動(dòng)成功,但訪問(wèn)404的問(wèn)題
這篇文章主要介紹了解決springboot啟動(dòng)成功,但訪問(wèn)404的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
SpringBoot實(shí)現(xiàn)國(guó)密通信的流程步驟
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)國(guó)密通信的流程步驟,我們需要完成以下步驟:生成支持國(guó)密的證書(shū),配置兩個(gè) Spring Boot 項(xiàng)目,使用國(guó)密證書(shū)實(shí)現(xiàn) HTTPS和驗(yàn)證通信是否成功,通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下2024-11-11
Eureka源碼閱讀解析Server服務(wù)端啟動(dòng)流程實(shí)例
這篇文章主要為大家介紹了Eureka源碼閱讀解析Server服務(wù)端啟動(dòng)流程實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
詳解SpringBoot啟動(dòng)類的掃描注解的用法及沖突原則
這篇文章主要介紹了詳解SpringBoot啟動(dòng)類的掃描注解的用法及沖突原則,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
java?-jar命令及SpringBoot通過(guò)java?-jav啟動(dòng)項(xiàng)目的過(guò)程
本篇文章將為大家講述關(guān)于 SpringBoot 項(xiàng)目工程完成后,是如何通過(guò) java-jar 命令來(lái)啟動(dòng)的,以及介紹 java-jar 命令的詳細(xì)內(nèi)容,對(duì)SpringBoot java?-jav啟動(dòng)過(guò)程感興趣的朋友跟隨小編一起看看吧2023-05-05
使用springboot訪問(wèn)圖片本地路徑并映射成url
這篇文章主要介紹了使用springboot訪問(wèn)圖片本地路徑并映射成url的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08

