一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - JAVA基礎類庫之String類,StringBuffer類和StringBuilder類

JAVA基礎類庫之String類,StringBuffer類和StringBuilder類

2022-01-12 10:51YXXYX Java教程

這篇文章主要介紹了Java中基礎類庫的String類,StringBuffer類和StringBuilder類,是Java入門學習中的基礎知識,需要的朋友可以參考下

引言

字符串就是一連串的字符序列,Java提供了String、StringBuffer和StringBuilder三個類來封裝對字符串,并提供了系列方法來操作字符串對象。

  • String類是不可變類的;
  • StringBuffer對象則代表一個字符序列可變的字符串,當一個StringBuffer被創建以后,通過StringBuffer提供的append、insert、reverse、setCharAt、setLength等方法可以改變這個字符串對象的字符序列;一旦通過StringBuffer生成了最終想要的字符串,就可以調用它的toString方法將其轉換為一個String對象,使其不可變;
  • JDK1.5又新增了一個StringBuilder類,它也代表了字符串對象,StringBuffer和StringBuilder基本相同,構造器和方法也一樣,不同點是:StringBuffer是線程安全的,StringBuilder是線程不安全的,但是性能更高;所以通常情況下,創建一個內容可變的字符串,應優先選擇StringBuilder類;

下面分別介紹一下這三種字符串類的一些常用方法(StringBuffer和StringBuilder方法基本相同,一起介紹了)

String類

這里還是簡單說一下為什么String類不能修改吧;

簡單來說,因為String類的使用頻率太大了,為了進一步提高效率,String類所聲明的字符串都會保存到常量池中,這樣用哪個字符串直接取出來就可以了;

其實就記住不管怎樣String類字符串就存放在常量池中;

舉個例子:

?
1
2
String s1 = new String("Hello");
String s2 = "World" + s1;

能看出來創建了幾個對象嗎?

答案是三個;一個Hello,一個World,一個HelloWorld;先是Hello存放到了常量池中,然后World又進去,最后它倆組合形成新的字符串HelloWorld又放了進去;

如果理解不了,那么就記住一點:String類字符串一旦創建不可變。

String類構造方法 

  • String s = "abc";
  • String s = new String("abc");
  • String s = new String(byte數組);
  • String s = new String(byte數組, 起始下標, 長度);
  • String s = new String(char數組);
  • String s = new String(char數組, 起始下標, 長度);

記住這幾種就可以了;

String常用方法:

簡單介紹的方法

 length

作用:返回字符串長度

比較簡單,就不詳細介紹了,出現頻率非常高

注意:數組里面的length是屬性,這里的length()是方法;

isEmpty

作用:判斷字符串是否為空字符串;

空字符串返回true,否則返回false

注意:判斷的是空字符串""(即length()為0),而不是null,如果是null會造成空指針異常;

詳細介紹的方法

 contians

作用:判斷前面的字符串是否包含后面的字符串

格式:public boolean contains?(CharSequence s)

參數 :s - 搜索的順序 (CharSequence是一個接口,String類已實現,所以可以傳入一個字符串)

結果 :如果此字符串包含 s , 則為 true,否則為 false

例如:

?
1
2
System.out.println("HelloWorld".contains("World")); // 輸出true
System.out.println("HelloWorld".contains("Java")); // 輸出false

endsWith

作用:判斷當前字符串是否以某個字符串結尾

格式:public boolean endsWith?(String suffix)

參數:suffix - 后綴

結果:如果當前字符串以suffix結尾,為true,否則為false

例如:

?
1
2
System.out.println("Java.txt".endsWith("Java")); // 輸出false
System.out.println("Java.txt".endsWith(".txt")); // 輸出true

startsWith

作用:判斷當前字符串是否以某個字符串開始

格式:public boolean startsWith?(String suffix)

參數:suffix - 前綴

結果:如果當前字符串以suffix開始,為true,否則為false

例如:

?
1
2
System.out.println("Java.txt".startsWith("Java")); // 輸出true
System.out.println("Java.txt".startsWith(".txt")); // 輸出false

equalsIgnoreCase

作用:判斷兩個字符串是否相等,判斷時忽略大小寫

格式:public boolean equalsIgnoreCase?(String anotherString)

參數:anotherString - String

結果:如果兩個字符串忽略大小寫的情況下相等,返回true,否則為false

例如:

?
1
2
System.out.println("ABc".equalsIgnoreCase("abC")); // true
System.out.println("aABc".equalsIgnoreCase("abC")); // false

其實這個功能很常見,就比如我們輸入驗證碼時有些情況就自動忽略了你輸入字母的大小寫;

getBytes

作用:將字符串對象轉換為字節數組(字符對應的Ascii碼數組)

格式:public byte[] getBytes?(String charsetName)

參數:charsetName - String

結果:返回一個byte[]數組,對應每個字符的Ascii碼

例如:

?
1
2
byte[] b = "abcde".getBytes();
for (var i : b) System.out.print(i + " "); // 輸出:97 98 99 100 101

indexOf

作用:返回某個字符串在當前字符串中第一次出現處的下標

格式:public int indexOf?(String str)

參數:str - 要搜索的子字符串

結果:返回指定子字符串的首次出現的索引,如果沒有這種情況返回 -1

例如:

?
1
2
System.out.println("HelloWorld".indexOf("llo")); // 輸出:2
System.out.println("HelloWorld".indexOf("ol")); // 輸出:-1

lastIndexOf

作用:返回某個字符串在當前字符串中最后一次出現處的下標

格式:public int lastIndexOf(String str)

參數:str - 要搜索的子字符串

結果:返回指定子字符串的最后一次出現的索引,如果沒有這種情況返回 -1

例如:

?
1
2
System.out.println("HelloWorld".lastIndexOf("l")); // 輸出:8
System.out.println("HelloWorld".lastIndexOf("ol")); // 輸出:-1

replace

作用:將某字符串與目標序列匹配的字符串替換為指定的字符串,替換從字符串開始到結束

格式:public String replace?(CharSequence target, CharSequence replacement)

參數:target - 要替換子串 replacement -指定的子符串

結果:生成的替換后的字符串

例如:

?
1
2
3
String s = "Hello World World".replace("World", "Java");
System.out.println(s);
// 輸出:Hello Java Java

split

作用:將字符串拆分

格式:public String[] split?(String regex)

參數:regex - 分隔正則表達式 (同樣可以通過字符串進行拆分,這里先用字符串作為案例)

結果:拆分后字符串存入的數組

例如:

?
1
2
3
4
5
6
7
8
String[] s = "year:2021-month:09-day:15-time:23:30".split("-"); // 以字符串"-"進行拆分;
for (var i : s) System.out.println(i);
/* 輸出:
year:2021
month:09
day:15
time:23:30
*/

substring(一個參數)

作用:返回一個字符串,該字符串是此字符串的子串; 子字符串以指定索引beginIndex的字符開始,并擴展到此字符串的末尾;

格式:public String substring?(int beginIndex)

參數:beginIndex - 包含起始索引

結果:截取后的子字符串

例如:

?
1
2
3
String s = "Today is a good day!";
System.out.println(s.substring(9));
// 輸出:a good day!

substring(兩個參數)

作用:返回一個字符串,該字符串是此字符串的子串;子串從指定的beginIndex開始,并擴展到索引號為endIndex - 1的字符 ;

格式:public String substring?(int beginIndex, int endIndex)

參數:beginIndex - 開始索引(包括) endIndex - 結束索引(不包括) // 左閉右開

結果:截取后的子字符串

例如:

?
1
2
3
String s = "Today is a good day!";
System.out.println(s.substring(9, 15));
// 輸出:a good

toCharArray

作用:將字符串轉化為一個字符串數組

格式:public char[] toCharArray?()

參數:無參數

結果:返回對應字符串的數組

例如:

?
1
2
3
char[] s = "Today is a good day!".toCharArray();
for (var i : s) System.out.print(i + " ");
// 輸出:T o d a y   i s   a   g o o d   d a y !

toLowerCase

作用:將此String所有字符轉換為小寫,使用默認語言環境的規則

格式:public String toLowerCase?()

參數:無參數

結果:返回轉為小寫的字符串

例如:

?
1
2
System.out.println("HELLOWORLD".toLowerCase());
// 輸出:helloworld

toUpperCase

作用:將此String所有字符轉換為大寫,使用默認語言環境的規則

格式:public String toUpperCase?()

參數:無參數

結果:返回轉為大寫的字符串

例如:

?
1
2
System.out.println("helloworld".toUpperCase());
// 輸出:HELLOWORLD

trim

作用:去除字符串前后空格

格式:public String trim?()

參數:無

結果:返回去除空格后的字符串

例如:

?
1
2
System.out.println("    hello      world    ".trim());
// 輸出:hello      world

有時候你要使用搜索引擎搜索時,如果前面多打了幾個空格,并不影響結果;或者有的賬號登錄會忽略開始和結束的空格,都會用到這個方法;

valueOf

作用:將任何非字符串轉化為字符串

格式:public static String valueOf?(一些變量)

參數:參數可以是int,double等基本數據類型,也可以是Object等引用數據類型

結果:返回轉化后的字符串

例如:

?
1
2
3
4
5
6
System.out.println(String.valueOf(1234)); // 1234
System.out.println(String.valueOf(3.14159)); // 3.14159
System.out.println(String.valueOf(true)); // true
char[] s = new char[] {'a', 'b', 'c'};
System.out.println(String.valueOf(s)); // abc
System.out.println(String.valueOf(new Object())); // java.lang.Object@776ec8df

這里需要說一下,valueOf使用是非常廣泛的;我們可以看到最后一個案例,輸出一個對象:new Object(),結果是它的地址以及位置信息等,是不是和 toString() 方法特別像?其實當傳入vauleOf一個對象時,vauleOf對應的源碼里就調用了toString()方法,所以才會輸出一樣的結果;所以說,如果我們重寫了toString方法,就會調用我們重寫的toString,輸出對應信息;

還有,當我們用 System.out.println()輸出的時候,如果傳入的是對象,系統會默認調用toString,這是什么原因?調用println源碼可以發現,每一個重載版本的println都會調用valueOf,所以如果println傳入一個對象的話,就會調用valueOf方法,因為valueOf方法中有toString方法,所以就默認調用了toString方法,將對象轉化為字符串輸出;

剛才說了一點:每一個重載版本的println都會調用valueOf,當然也包括了基本數據類型,就以boolean例,看看它的源碼;

JAVA基礎類庫之String類,StringBuffer類和StringBuilder類

可以看到boolean的println會調用 valueOf 的,其實其他基本數據類型也差不多,傳入println后都會調用 valueOf ,所以可以得出結論:println輸出的總是一個字符串;

StringBuffer/StringBuilder常用方法

一些總結:

  • StringBuffer/StringBuilder可以看做可變長度字符串。
  • StringBuffer/StringBuilder初始化容量16.
  • StringBuffer是線程安全的。StringBuilder是非線程安全的。
  • 頻繁進行字符串拼接不建議使用“+”,對運行效率有影響;

下面就以StringBuffer為例,StringBuilder也是一樣;

StringBuffer類構造方法 

  • StringBuffer?()
  • StringBuffer?(int capacity指定初始化容量)
  • StringBuffer?(CharSequence seq)
  • StringBuffer?(String str) 

StringBuffer常用方法:

 append

作用:將傳入的數據追加在字符串后面

格式:public StringBuffer append(可以是int,char,String等)

參數:int,char,String等

結果:組合后形成的新的字符串

capacity

作用:返回當前容量

格式:public int capacity?()

參數:無

結果:當前字符串的容量(和長度length()不同)

delete

作用:刪除字符串從 start 起始索引到 end-1 終止索引間的字符串;

格式:public StringBuffer delete?(int start,int end)

參數:start - 開始索引 end - 結束索引(左閉右開)

結果:刪除后的字符串

insert

作用:在字符串序列中插入對應數據

格式:public StringBuffer insert?(一些參數)

參數:一般第一個參數是插入位置int ,第二個是插入內容:可以是char[],String,還有基本數據類型等;

結果:插入后的字符串

replace

作用:替換指定位置的指定字符串

格式:public StringBuffer replace?(int start, int end,String str)

參數:start - 開始索引 end - 結束索引 (左閉右開)str - 將替換的字符串。

結果:替換后的新的字符串

總結

這里只是簡單介紹了一下String類 、StringBuffer類和StringBuilder類,對它們的常用方法也是有了一個簡單的介紹,但是這也是很少的一部分,只是混個眼熟;所以實際開發過程中要會用JDK API幫助文檔,因為Java所有的方法和類你不可能全部都記住或者見過,所以一定要會用工具;

對于一些方法很簡單,可能會覺得沒有必要,但是既然有這個方法,那么肯定是有存在意義的;在實際開發中,這些方法不僅能提高你代碼的可讀性,還會減少你的代碼量,所以都要有了解;

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!

原文鏈接:https://blog.csdn.net/YXXXYX/article/details/120313081

延伸 · 閱讀

精彩推薦
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
主站蜘蛛池模板: 日本高清有码视频 | 国产白白视频在线观看2 | 爱爱小视频免费看 | 无码一区国产欧美在线资源 | h玉足嫩脚嗯啊白丝 | 久久水蜜桃亚洲AV无码精品偷窥 | 午夜国产在线观看 | 日本xxwwwxxxx| 99久久精彩视频 | 日本欧美大码a在线视频播放 | www.色.con| 免费国产好深啊好涨好硬视频 | 成版人快猫永久破解版 | 日本不卡在线观看免费v | 肉搏潘金莲三级18春 | 美女乳液 | 暖暖的韩国免费观看 | 天堂久久久久va久久久久 | 久久黄色录像 | 国内精品伊人久久大香线焦 | 青青青草免费 | 性插图动态图无遮挡 | 性满足久久久久久久久 | 网址在线观看你懂我意思吧免费的 | 白丝校花被扒开双腿喷水小说 | 亚洲黄色片免费看 | 国产午夜永久福利视频在线观看 | 国产一区精品视频 | 五月色天在线视频综合观看 | 天海翼黄色三级 | 国产一区二区视频在线观看 | 免费看又黄又爽又猛的视频软件- | 韩国三级 720p| 午夜亚洲福利 | 性欧美sexvideo另类 | 国产大片免费在线观看 | 欧美办公室激情videos高清 | 97社区| 日日操天天爽 | 91久| 色综合91久久精品中文字幕 |