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è)字符串!)。
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)文章
SpringCloud OpenFeign Post請(qǐng)求400錯(cuò)誤解決方案
這篇文章主要介紹了SpringCloud OpenFeign Post請(qǐng)求400錯(cuò)誤解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09詳解java如何實(shí)現(xiàn)將數(shù)據(jù)導(dǎo)出為yaml
這篇文章主要為大家詳細(xì)介紹了java如何利用snakeyaml和freemarker實(shí)現(xiàn)將數(shù)據(jù)導(dǎo)出為yaml文件,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下2023-11-11SpringBoot使用Sa-Token實(shí)現(xiàn)登錄認(rèn)證
本文主要介紹了SpringBoot使用Sa-Token實(shí)現(xiàn)登錄認(rèn)證,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04Nacos客戶端配置中心緩存動(dòng)態(tài)更新實(shí)現(xiàn)源碼
這篇文章主要為大家介紹了Nacos客戶端配置中心緩存動(dòng)態(tài)更新實(shí)現(xiàn)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-03-03java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(1)
下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你2021-07-07深入理解Java中Filter的作用種類及應(yīng)用場(chǎng)景
Filter(過(guò)濾器)是Java Web中的一種重要組件,可以對(duì)請(qǐng)求和響應(yīng)進(jìn)行攔截處理,對(duì)數(shù)據(jù)進(jìn)行過(guò)濾和處理。Filter可以實(shí)現(xiàn)許多功能,如:鑒權(quán)、日志記錄、字符編碼轉(zhuǎn)換、數(shù)據(jù)壓縮、請(qǐng)求重定向等等2023-04-04