日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

groovy 字符串截取最后一个_Java基础篇——字符串详解

發(fā)布時(shí)間:2023/12/2 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 groovy 字符串截取最后一个_Java基础篇——字符串详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

字符串的聲明

字符串是內(nèi)存中連續(xù)排列的0個(gè)或多個(gè)字符。不變字符串是指字符串一旦創(chuàng)建,其內(nèi)容就不能改變,Java中使用String類(lèi)來(lái)處理不變字符串,在對(duì)String類(lèi)的實(shí)例進(jìn)行查找、比較、拼接等操作時(shí),既不能輸入新字符,又不能改變字符串的長(zhǎng)度。

Java程序中的字符串分為常量和變量?jī)煞N,其中,字符串常量使用雙引號(hào)括起來(lái)的一串字符,系統(tǒng)為程序中出現(xiàn)的字符串常量自動(dòng)創(chuàng)建一個(gè)String對(duì)象。例如:

System.out.println("hello world!");

這句話(huà)將創(chuàng)建一個(gè)String對(duì)象,值為“hello world!”。

對(duì)于字符串變量,在使用之前要顯式聲明,并進(jìn)行初始化。

字符串的聲明方式有三種:

  • 直接創(chuàng)建: String str1 = "Hello";

字符串是對(duì)象,雖然我們?cè)谶@里沒(méi)有用new創(chuàng)建對(duì)象,其實(shí)是編譯器給我們做了這些操作。這種創(chuàng)建的字符串對(duì)象有一個(gè)特點(diǎn),如果同樣的對(duì)象如果存在了,就不會(huì)創(chuàng)建一個(gè)新的對(duì)象,而是指向了同樣的對(duì)象。例如String str2 = "Hello";,則str1和str2是指向了字符串池中同樣的內(nèi)存地址,即 str1 == str2。

  • 使用字符串連接創(chuàng)建: String str = "Hello" + "World";

這種形式其實(shí)可以看做是第一種的形式的特殊形式。 "Hello" + "World"在編譯期會(huì)被自動(dòng)折疊為常量“HelloWorld”,所以,最后只會(huì)創(chuàng)建一個(gè)對(duì)象:String str = "HelloWorld";

JDK1.7開(kāi)始,javac會(huì)進(jìn)行常量折疊,全字面量字符串相加是可以折疊為一個(gè)字面常量,而且是進(jìn)入常量池的。這個(gè)問(wèn)題涉及到了字符串常量池和字符串拼接。
String a="a"+"b"+"c";
通過(guò)編譯器優(yōu)化后,得到的效果是:
String a="abc";
  • new創(chuàng)建字符串: String str1 = new String("Hello");

用new關(guān)鍵字創(chuàng)建的字符串每次都會(huì)創(chuàng)建一個(gè)新的對(duì)象。即使這時(shí)創(chuàng)建一個(gè)字符串

String str2 = new String("Hello");

str1與str2是兩個(gè)對(duì)象,str1 != str2。

注意點(diǎn):String str = new String("Hello"); 會(huì)產(chǎn)生幾個(gè)對(duì)象?
如果字符串池里面沒(méi)有“Hello”對(duì)象,會(huì)在字符串池里面生成一個(gè)對(duì)象,然后再生成一個(gè)字符串對(duì)象,str指向這個(gè)對(duì)象;如果字符串池里面已經(jīng)有了“Hello”對(duì)象,則只會(huì)生成一個(gè)對(duì)象,str指向這個(gè)對(duì)象。

字符串的操作

字符串創(chuàng)建以后,可以使用字符串類(lèi)中的方法對(duì)它進(jìn)行操作。日常開(kāi)發(fā)中常用的操作字符串的方法有:

  • String當(dāng)中與獲取相關(guān)的常用方法

public int length():獲取字符串當(dāng)中含有的字符個(gè)數(shù),拿到字符串長(zhǎng)度。

public String concat(String str):將當(dāng)前字符串和參數(shù)字符串**拼接**成為返回值新的字符串。

public char charAt(int index):獲取指定索引位置的單個(gè)字符。(索引從0開(kāi)始。)

public int indexOf(String str):查找參數(shù)字符串在本字符串當(dāng)中首次出現(xiàn)的索引位置,如果沒(méi)有返回-1值。

  • 字符串的截取方法

public String substring(int index):截取從參數(shù)位置一直到字符串末尾,返回新字符串。

public String substring(int begin, int end):截取從begin開(kāi)始,一直到end結(jié)束,中間的字符串。

備注:[begin,end),包含左邊,不包含右邊。

  • 字符串轉(zhuǎn)換的方法

public char[] toCharArray():將當(dāng)前字符串拆分成為字符數(shù)組作為返回值。

public byte[] getBytes():獲得當(dāng)前字符串底層的字節(jié)數(shù)組。

public String replace(CharSequence oldString, CharSequence newString):

將所有出現(xiàn)的老字符串替換成為新的字符串,返回替換之后的結(jié)果新字符串。

備注:CharSequence意思就是說(shuō)可以接受字符串類(lèi)型。

  • 分割字符串

public String[] split(String regex):按照參數(shù)的規(guī)則,將字符串切分成為若干部分。

注意事項(xiàng):
split方法的參數(shù)其實(shí)是一個(gè)“正則表達(dá)式”。
轉(zhuǎn)義必須寫(xiě)"."(兩個(gè)反斜杠)
如果split失敗則返回一個(gè)空字符串?dāng)?shù)組,比如split(".")就會(huì)失敗,正則不明確,程序不知道怎么切了。

字符串的比較

String字符串可以使用“==”和equals()方法比較。當(dāng)兩個(gè)字符串使用“==”進(jìn)行比較時(shí),比較的是兩個(gè)字符串在內(nèi)存中的地址。當(dāng)兩個(gè)字符串使用equals方法比較時(shí),比較的是兩個(gè)字符串的值是否相等。

上面例子中,s1 和 s2 使用相同的字符串常量來(lái)定義,相同的字符串常量在系統(tǒng)內(nèi)部只存在一個(gè),即 s1 和 s2 都指向這同一個(gè)常量,所以使用 “==” 或 “equals”方法來(lái)判斷時(shí),結(jié)果都是相等的。而 s3 是使用字符串常量創(chuàng)建的另一個(gè)對(duì)象,雖然它與 s1 所含的字符是一樣的,但卻是不同的對(duì)象,故使用 “==” 判斷時(shí),s1 和 s3 是不相等的。類(lèi)似的,s4 也是另一個(gè)對(duì)象,使用 “==” 判斷時(shí),s3 和 s4 頁(yè)是不相等的。而 s5 與 s1 指向同一個(gè)實(shí)例,所以他們?cè)趦煞N方式下的比較都是相等的。

String、StringBuffer和StringBuilder的關(guān)系

String類(lèi)的對(duì)象實(shí)例是不可變的,一旦創(chuàng)建就確定下來(lái),對(duì)字符串施加操作后并不改變字符串本身,而是有生成了一個(gè)實(shí)例。對(duì)于那些需要改變內(nèi)容并有許多操作的字符串,可以使用StringBuffer類(lèi)或者StringBuilder類(lèi)。它們之間的區(qū)別如下:

  • String是字符串常量,一旦創(chuàng)建就不能修改。對(duì)于已經(jīng)存在的String對(duì)象的修改都是重新創(chuàng)建一個(gè)新的對(duì)象,然后把新的值保存進(jìn)去。String類(lèi)是final修飾的,不能被繼承。覆蓋了equals方法和hashCode()方法。
  • StringBuffer是字符串可變對(duì)象,可以對(duì)字符串進(jìn)行操作,修改字符串原有值時(shí)不會(huì)新建一個(gè)對(duì)象。執(zhí)行效率較慢,但是線程安全。StringBuffer沒(méi)有覆蓋equals方法和hashCode()方法??梢詣?dòng)態(tài)的拼接字符換,使用 append() 方法。
  • StringBuilder也是字符串可變對(duì)象,同StringBuffer一樣,可以對(duì)字符串進(jìn)行操作,也不會(huì)新建對(duì)象。執(zhí)行效率高效,但是線程不安全。

點(diǎn)個(gè)關(guān)注吧,我會(huì)持續(xù)更新,下期更精彩哦~~

總結(jié)

以上是生活随笔為你收集整理的groovy 字符串截取最后一个_Java基础篇——字符串详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。