Java字符串

字符串

  • String對象的方法
方法 描述
length() 返回字符串的長度,也就是字符串的字符數(shù)
charAt() 返回字符串中指定位置的字符
concat(s1) 將本字符串和s1字符串連接,返回一個新的字符串
toUpperCase() 返回一個新的字符串,所有字母大寫
toLowerCase() 返回一個新的字符串,所以字母小寫。
trim() 返回新的字符串,去掉兩邊空白字符

上面的方法只能從字符串實例調(diào)用,這些方法稱為實例方法。
調(diào)用實例方法的語法是:
reference-Variable.methodName(arguments)
調(diào)用靜態(tài)方法的語句是:
ClassName.methodName(arguments)

1.Java允許在不創(chuàng)建新變量的情況下,使用字符串字面值直接引用字符串,
Hello World.length()是正確的。
2.s.charAt(index),其下標(biāo)index的取值范圍在0~s.length()-1之間。s.charAt(s.length())會造成一個StringIndexOutOfBoundsException異常。

  • 子串

String類的substring方法可以從一個較大的字符串提取出一個子串。
String greeting = "Hello";
String s = greeting.substring(0,3);
substring方法的第二個參數(shù)是不想 復(fù)制的第一個位置。字符串是s.substring(a,b)的長度為b-a。

  • 連接字符串

使用concat方法連接兩個字符串。Java也可以使用“+”號連接(拼接)兩個字符串。當(dāng)一個字符串與一個非字符串的值進(jìn)行拼接時,后者被轉(zhuǎn)換成字符串。

  • 不可變字符串

String類沒有提供用于修改 字符串的方法。如果要修改字符串,先提取需要的字符串再拼接上替換的字符串。由于String字符串的不可變性我們可以十分肯定常量池中一定不存在兩個相同的字符串
String str = "hello";
先在棧中創(chuàng)建引用變量str,再看看常量池中有沒有字符串"hello",如果有直接將str變量指向字符串,沒有就在堆中(常量池)創(chuàng)建hello放入常量池然后指向它。
String str = new String("hello");
則是在堆中創(chuàng)建新的對象,放在堆內(nèi)存中。

靜態(tài)常量池:即*.class文件中的常量池,class文件中的常量池不僅僅包含字符串(數(shù)字)字面量,還包含類、方法的信息,占用class文件絕大部分空間。
運行時常量池:則是jvm虛擬機(jī)在完成類裝載操作后,將class文件中的常量池載入到內(nèi)存中,并保存在方法區(qū)中。
我們常說的常量池,就是指方法區(qū)中的運行時常量池。JDK1.7及之后版本的 JVM 已經(jīng)將運行時常量池從方法區(qū)中移了出來,在 Java 堆(Heap)中開辟了一塊區(qū)域存放運行時常量池。

詳情
運行數(shù)據(jù)區(qū)域
  • 檢測字符串是否相等

1.使用equals方法檢測兩字符串是否相等,對于表達(dá)式:
s.equals(t)
如果字符串s和字符串t相等,則返回變量true,否則返回false。
2.想要檢查兩個字符串是否相等,而且不區(qū)分大小寫可以使用equalsIgnoreCase方法。
3.如果虛擬機(jī)始終將相同的字符串共享, 就可以使用=運算符檢測是否相等。但實際上
只有字符串常量是共享的,而 + 或 substring 等操作產(chǎn)生的結(jié)果并不是共享的。因此,千萬不
要使甩== 運算符測試字符串的相等性, 以免在程序中出現(xiàn)糟糕的 bug。

  • 空串與Null串

空串""是長度為零的字符串,可以調(diào)用一下代碼檢查字符串是否為空:
if (str.length()==0)

if (str.equals(""))
檢查一個字符串是否是null,要使用以下條件:
if (str == null)

  • 構(gòu)建字符串

如果需要用許多小段的字符串構(gòu)建一個字符串, 那么應(yīng)該按照下列步驟進(jìn)行。 首先, 構(gòu)建一個空的字符串構(gòu)建器:
StringBuilder builder = new StringBuilder();
當(dāng)每次需要添加一部分內(nèi)容時,就調(diào)用append方法。
builder.append();
在需要構(gòu)建字符串時就調(diào)用toString方法,就能得到String對象,
String completedString = builder.toStringO;

注釋:在 JDK5.0 中引入 StringBuilder 類。 這個類的前身是 StringBuffer, 其效率稍有些低, 但允許采用多線程的方式執(zhí)行添加或刪除字符的操作 U 如果所有字符串在一個單線程中編輯 (通常都是這樣,) , 則應(yīng)該用 StringBuilder 替代它。 這兩個類的 AP丨是相同的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • package cn.itcast_01;/* 字符串:就是由多個字符組成的一串?dāng)?shù)據(jù)。也可以看成是一個字符數(shù)組。 ...
    蛋炒飯_By閱讀 723評論 0 0
  • 問:Java 的 == 與 equals 有什么區(qū)別? 答:對于 ==,如果作用于基本數(shù)據(jù)類型的變量,則直接比較其...
    Little丶Jerry閱讀 499評論 0 0
  • 來自: http://www.cnblogs.com/freeabyss/archive/2013/05/15/3...
    樂魚先生閱讀 379評論 0 0
  • 也許,舍得放手,才能重新出發(fā)吧。 2018.9.27
    秋天的木棉花閱讀 164評論 0 0
  • 年底,多年前玩得很要好的同事給我發(fā)QQ消息,對話框那邊簡單幾個字,"在嗎,老伙計。" 而在之前的幾年前跟他有過一次...
    梨逍遙閱讀 227評論 0 2

友情鏈接更多精彩內(nèi)容