初識java的String類

String類

文章目錄

String類

什麼是字串

字串常見的賦值方法

直接賦值法

構造方法進行建立

字串的比較相等

字串常量池

字串常量池的例項

字串的不可變

字串的常見操作

字串的比較

equals方法

equalsIgnoreCase方法

compareTo方法

字串的查詢

contains()方法

indexOf()方法

lastIndexOf(String str)方法

lastIndexOf(String str,int fromIndex)方法

startsWith(String prefix)

startsWith(String prefix,int toffset)

endsWith(String suffix)

字串替換

replaceAll(String regx,String replacement)

replaceFirst(String regx,String replacement)

字串拆分

split(String regex)

split(String regex,int limit)

字串擷取

substring(int bedinIndex)

substring(int beginIndex,int endIndex)

什麼是字串

字串或串(String)是由數字、字母、下劃線組成的一串字元。一般記為 s=“a1a2···an”(n>=0)。它是程式語言中表示文字的資料型別。在程式設計中,字串(string)為符號或數值的一個連續序列,如符號串(一串字元)或二進位制數字串(一串二進位制數字)。其在java語言中可以透過一定的方法提取字串中的一個字元

字串常見的賦值方法

直接賦值法

String 變數名=" 初始值"

這種賦值方法經常被我們使用

public

static

void

main

String

args

{

String

str1

=

“hello world”

System

out

println

str1

}

初識java的String類

構造方法進行建立

格式:

String 變數名=new String(初始值)

public

static

void

main

String

args

{

String

str2

=

new

String

“SWPU YYDS”

System

out

println

str2

}

初識java的String類

注意:初始值不只侷限於常量字串,也可以是陣列

比如字元陣列:

public

static

void

main

String

args

{

char

ch

=

{

‘S’

‘W’

‘P’

‘U’

}

String

str3

=

new

String

ch

System

out

println

str3

}

初識java的String類

又如位元組陣列:

public

static

void

main

String

args

{

byte

a

=

{

94

95

94

}

String

str3

=

new

String

a

System

out

println

str3

}

初識java的String類

此外也可以透過這種構造方式把字元陣列或者位元組陣列部分元素轉換為字串

public

static

void

main

String

args

{

char

ch

=

{

‘a’

‘b’

‘c’

‘d’

‘e’

‘f’

}

String

str4

=

new

String

ch

1

3

//1這個位置是字串的開始位置,3為字串的長度

System

out

println

str4

}

初識java的String類

字串的比較相等

在int變數中判斷兩個int變數被賦予的值是否相等使用“==”便可以判斷

public

static

void

main

String

args

{

int

a

=

520

int

b

=

520

System

out

println

“a==b:”

+

a

==

b

}

初識java的String類

那麼有人就會認為字串的比較也可以用“==”進行比較

如圖:

public

static

void

main

String

args

{

String

str5

=

“abcdef”

String

str6

=

“abcdef”

System

out

println

“str5和str6是否相等”

+

str5

==

str6

}

初識java的String類

那麼字串是不是就依靠“==”進行判斷的呢?其結果顯然是

初識java的String類

就如這個程式碼:

public

static

void

main

String

args

{

String

str8

=

“abcdef”

String

str7

=

new

String

“abcdef”

System

out

println

“str7和str8是否相等”

+

str7

==

str8

}

初識java的String類

public

static

void

main

String

args

{

String

str8

=

new

String

“abcdef”

String

str7

=

new

String

“abcdef”

System

out

println

“str7和str8是否相等”

+

str7

==

str8

}

初識java的String類

為什麼使用“==”會出現這種情況呢?

實際上String 使用 == 比較並不是在比較字串內容, 而是比較兩個引用是否是指向同一個物件

就比如:這裡有兩個籃子分別為A,B;分別裡面放相同的5個蘋果,將這兩個籃子看做兩個不同的類A和類B,而這個比較的便是類是否相同,而不是比較類裡面的內容是否相同。

為了比較字串內容是否相等那麼我們就得使用String類提供的equals方法

public

static

void

main

String

args

{

String

str8

=

“abcdef”

String

str7

=

new

String

“abcdef”

System

out

println

“str7和str8是否相等”

+

str7

equals

str8

}

初識java的String類

public

static

void

main

String

args

{

String

str8

=

new

String

“abcdef”

String

str7

=

new

String

“abcdef”

System

out

println

“str7和str8是否相等”

+

str7

equals

str8

}

初識java的String類

字串常量池

在上面所講的字串賦值操作中

直接賦值為什麼使用“==”進行比較有的就是true而有的就是false呢?

實際上當我們採用了直接賦值的模式進行String類的物件例項化操作,那麼該例項化物件(字串內容)將自動儲存到字串常量池之中,並且如果下次繼續使用直接賦值的模式宣告String類物件,此時物件池之中如若有指定內容,將直接進行引用如若沒有,則開闢新的字串物件而後將其儲存在物件池之中以供下次使用。

public

static

void

main5

String

args

{

String

str5

=

“abcdef”

String

str6

=

“abcdef”

System

out

println

“str5和str6是否相等”

+

str5

==

str6

}

初識java的String類

而我們使用構造方法時,首先String類的物件例項化操作時,先在字元常量池中尋找是否有字串內容,如果有就不需要在放入字串常量池中,其次在堆上開闢一個記憶體空間,該空間指向字串常量池上的內容,而棧上的物件指向新開闢的記憶體空間

public

static

void

main6

String

args

{

String

str8

=

“abcdef”

String

str7

=

new

String

“abcdef”

System

out

println

“str7和str8是否相等”

+

str7

==

str8

}

初識java的String類

初識java的String類

注意:在採用直接賦值時,只會開闢一塊堆記憶體空間,並且該字串物件可以自動儲存在物件池中以供下次使用。在採用構造方法時會開闢兩塊堆記憶體空間,不會自動儲存在物件池中,可以使用intern()方法手工池。

字串常量池的例項

為了更好了解字串常量池這裡有幾個例項可以加以練習

例項一

public

static

void

main

String

args

{

String

str1

=

“abcdef”

String

str2

=

“abc”

+

“def”

System

out

println

str1

==

str2

}

初識java的String類

初識java的String類

2。 例項二

public

static

void

main

String

args

{

String

str1

=

“abcdef”

String

str2

=

“abc”

String

str3

=

str2

+

“def”

System

out

println

str1

==

str3

}

注意str2是變數,在編譯的時候無法知道里面的值是什麼,只有執行到時才知道

初識java的String類

初識java的String類

3。 例項三

public

static

void

main

String

args

{

String

str1

=

“abcdef”

String

str2

=

“abc”

+

new

String

“def”

System

out

println

str1

==

str2

}

初識java的String類

初識java的String類

4。 例項四

public

static

void

main

String

args

{

String

str1

=

“abcdef”

String

str2

=

new

String

“abc”

+

new

String

“def”

System

out

println

str1

==

str2

}

初識java的String類

初識java的String類

5。 例項五

public

static

void

main

String

args

{

String

str1

=

“abc”

String

str2

=

str1

str1

=

“def”

System

out

println

str1

==

str2

}

初識java的String類

初識java的String類

字串的不可變

字串是一種不可變物件。 它的內容不可改變。

String 類的內部實現也是基於 char[] 來實現的, 但是 String 類並沒有提供 set 方法之類的來修改內部的字元陣列。

如程式碼:

public

static

void

main

String

args

{

String

str

=

“hello”

str

=

str

+

“ world”

str

+=

“!!!”

System

out

println

str

}

初識java的String類

結果看似簡單其實底層進行了許多操作

第一步:

初識java的String類

第二步:

初識java的String類

第三步:

初識java的String類

那麼如果我們需要修改字串, 例如, 現有字串 str = “Hello” , 想改成 str = “hello” , 該怎麼辦?

最簡單的方法是:藉助原字串,建立新的字串

public

static

void

main

String

args

{

String

str

=

“Hello”

str

=

“h”

+

str

substring

1

System

out

println

str

}

初識java的String類

為什麼String為不可變?

方便實現字串物件池。 如果 String 可變, 那麼物件池就需要考慮何時深複製字串的問題了。

不可變物件是執行緒安全的。

不可變物件更方便快取 hash code, 作為 key 時可以更高效的儲存到 HashMap 中。

字串的常見操作

字串的比較

equals方法

該方法比較字串的內容並區分字元的大小關係

public

static

void

main

String

args

{

String

str

=

“Hello”

String

str1

=

“hello”

System

out

println

str

equals

str1

}

初識java的String類

equalsIgnoreCase方法

該方法比較字串的內容但不區分字元的大小關係

public

static

void

main

String

args

{

String

str

=

“Hello”

String

str1

=

“hello”

System

out

println

str

equalsIgnoreCase

str1

}

初識java的String類

compareTo方法

在String類中compareTo()方法是一個非常重要的方法,該方法返回一個整型,該資料會根據大小關係返回三類內容:如果相等則返回0;如果小於比較的字串則返回小於0;相反則返回大於0的值;

public

static

void

main

String

args

{

String

str1

=

“Hello”

String

str2

=

“hello”

System

out

println

str1

compareTo

str2

}

初識java的String類

public

static

void

main

String

args

{

String

str2

=

“Hello”

String

str1

=

“hello”

System

out

println

str1

compareTo

str2

}

初識java的String類

public

static

void

main

String

args

{

String

str2

=

“hello”

String

str1

=

“hello”

System

out

println

str1

compareTo

str2

}

初識java的String類

字串的查詢

contains()方法

該方法可以判斷該字串是否有子串有則返回true;沒有就返回false;

public

static

void

main

String

args

{

String

str1

=

“acbaskjcbaskd”

String

str2

=

“xass”

System

out

println

str1

contains

str2

}

初識java的String類

public

static

void

main

String

args

{

String

str1

=

“acbaskjcbaskd”

String

str2

=

“acbaskj”

System

out

println

str1

contains

str2

}

初識java的String類

indexOf()方法

該方法使字串從頭開始查詢需要查詢字串的位置,查到了就返回位置的開始索引,如果沒有檢查到則返回-1。

public

static

void

main

String

args

{

String

str1

=

“acbaskjcbaskd”

String

str2

=

“askj”

System

out

println

str1

indexOf

str2

}

初識java的String類

public

static

void

main

String

args

{

String

str1

=

“acbaskjcbaskd”

String

str2

=

“askjsass”

System

out

println

str1

indexOf

str2

}

初識java的String類

lastIndexOf(String str)方法

由後向前查詢子字串

public

static

void

main

String

args

{

String

str1

=

“acbaskjcbaskd”

String

str2

=

“askj”

System

out

println

str1

lastIndexOf

str2

}

初識java的String類

lastIndexOf(String str,int fromIndex)方法

從指定位置由後向前查詢。

public

static

void

main

String

args

{

String

str1

=

“acbaskjcbaskd”

String

str2

=

“askj”

System

out

println

str1

lastIndexOf

str2

1

}

初識java的String類

public

static

void

main

String

args

{

String

str1

=

“acbaskjcbaskd”

String

str2

=

“askj”

System

out

println

str1

lastIndexOf

str2

13

}

初識java的String類

startsWith(String prefix)

判斷是否以指定的字串開頭是則返回true不是則返回false

public

static

void

main

String

args

{

String

str1

=

“acbaskjcbaskd”

String

str2

=

“askj”

System

out

println

str1

startsWith

str2

}

初識java的String類

public

static

void

main

String

args

{

String

str1

=

“acbaskjcbaskd”

String

str2

=

“ac”

System

out

println

str1

startsWith

str2

}

初識java的String類

startsWith(String prefix,int toffset)

從指定位置開始判斷是否以指定字串開頭

public

static

void

main

String

args

{

String

str1

=

“acbaskjcbaskd”

String

str2

=

“bask”

System

out

println

str1

startsWith

str2

2

}

初識java的String類

endsWith(String suffix)

判斷是否以指定字串結尾

public

static

void

main

String

args

{

String

str1

=

“acbaskjcbaskd”

String

str2

=

“bask”

System

out

println

str1

endsWith

str2

}

初識java的String類

public

static

void

main

String

args

{

String

str1

=

“acbaskjcbaskd”

String

str2

=

“skd”

System

out

println

str1

endsWith

str2

}

初識java的String類

字串替換

replaceAll(String regx,String replacement)

替換字串中所有指定的內容

public

static

void

main

String

args

{

String

str

=

“helloworld”

System

out

println

str

replaceAll

“l”

“_”

}

初識java的String類

replaceFirst(String regx,String replacement)

替換字串中第一個指定的內容

public

static

void

main

String

args

{

String

str

=

“helloworld”

System

out

println

str

replaceFirst

“l”

“_”

}

初識java的String類

注意: 由於字串是不可變物件, 替換不修改當前字串, 而是產生一個新的字串.

字串拆分

split(String regex)

將字串全部拆分

public

static

void

main

String

args

{

String

str

=

“hello world hello swpu”

String

result

=

str

split

“ ”

for

String

s

result

{

System

out

println

s

}

}

初識java的String類

注意:有些特別的字元作為分隔符可能無法正確切分需要加上轉義

如:

public

static

void

main

String

args

{

String

str

=

“192。168。1。1”

String

result

=

str

split

“\\。”

for

String

s

result

{

System

out

println

s

}

}

初識java的String類

注意:

字元“|”,“*”,“+“都得加上跳脫字元,前面加上”\”。

而如果是“。”,那麼就得寫成“\”。

如果一個字串中有多個分隔符,可以用“|”作為連字元

split(String regex,int limit)

將字串部分拆分,該陣列長度就是limit極限

public

static

void

main

String

args

{

String

str

=

“hello world hello swpu”

String

result

=

str

split

“ ”

3

for

String

s

result

{

System

out

println

s

}

}

初識java的String類

字串擷取

substring(int bedinIndex)

從指定索引截止到結尾

public

static

void

main

String

args

{

String

str

=

“helloworld”

System

out

println

str

substring

3

}

初識java的String類

substring(int beginIndex,int endIndex)

擷取字串的部分內容

public

static

void

main

String

args

{

String

str

=

“helloworld”

System

out

println

str

substring

3

5

}

初識java的String類

注意:該區間為左閉右開則:[3,5)不包含5下標

,https://blog。csdn。net/weixin_49830664/article/details/120608026