【Java】認識String類

文章目錄

  • 一、String類的重要性
  • 二、String類中的常用方法
    • 1.字符串構造
    • 2.String對象的比較
    • 3.字符串查找
    • 4.轉換
    • 5.字符串替換
    • 6.字符串拆分
    • 7.字符串截取
    • 8.其他操作方法
    • 9.字符串的不可變性
    • 10.字符串修改
  • 三、StringBuilder和StringBuffer


一、String類的重要性

在C語言中已經涉及到字符串了,但是在C語言中要表示字符串只能使用字符數組或者字符指針,可以使用標準庫提供的字符串系列函數完成大部分操作,但是這種將數據和操作數據方法分離開的方式不符合面相對象的思想,而字符串應用又非常廣泛,因此Java語言專門提供了String類

二、String類中的常用方法

1.字符串構造

String類提供的構造方式非常多,常用的有以下三種:

public class Test {public static void main(String[] args) {String s = "hello";System.out.println(s);String s1 = new String("hello");System.out.println(s1);char[] s3 = {'h','e','l','l','o'};System.out.println(s3);}
}

在這里插入圖片描述
注意:
1.String類是引用類型,內部并不存儲字符串本身
2.在Java中""引起來的也是String類型對象

2.String對象的比較

Java中提供了四種比較方式:
1.==比較是否引用同一對象

public class Test {public static void main(String[] args) {int a = 10;int b = 20;int c = 10;System.out.println(a==b);System.out.println(a==c);System.out.println("********");String s = new String("hello");String s1 = new String("hello");String s2 = new String("word");String s3 = s;System.out.println(s==s1);System.out.println(s1==s2);System.out.println(s==s3);}
}

在這里插入圖片描述
注意: 對于內置類型,== 比較的是變量中的值;對于引用類型==比較的是引用中的地址

2.boolean equals(Object anObject) 方法:按照字典序比較
字典序:字符大小的順序
String類重寫了父類Object中equals方法,Object中equals默認按照==比較,String重寫equals方法后,按照如下規則進行比較

public class Test {public static void main(String[] args) {String s = new String("hello");String s1 = new String("hello");String s2 = new String("Hello");// equals比較:String對象中的逐個字符// s與s2引用的不是同一個對象,而且兩個對象中內容也不同,因此輸出false// s與s1引用的不是同一個對象,但是兩個對象中放置的內容相同,因此輸出trueSystem.out.println(s.equals(s2));System.out.println(s.equals(s1));}
}

在這里插入圖片描述
3.int compareTo(String s) 方法: 按照字典序進行比較
與equals不同的是,equals返回的是boolean類型,而compareTo返回的是int類型。具體比較方式:
1.先按照字典次序大小比較,如果出現不等的字符,直接返回這兩個字符的大小差值
2.如果前k個字符相等(k為兩個字符長度最小值),返回值兩個字符串長度差值

public class Test {public static void main(String[] args) {String s = new String("abc");String s1 = new String("ac");String s2 = new String("abc");String s3 = new String("abcde");System.out.println(s.compareTo(s1));//不同輸出字符的差值為-1System.out.println(s.compareTo(s2));//輸出字符相同為0System.out.println(s.compareTo(s3));//前幾個字符相同,輸出長度差值為-2}
}    

在這里插入圖片描述
4. int compareToIgnoreCase(String str) 方法:與compareTo方式相同,但是忽略大小寫比較

public class Test {public static void main(String[] args) {String s = new String("abc");String s1 = new String("ac");String s2 = new String("ABc");String s3 = new String("abcde");System.out.println(s.compareToIgnoreCase(s1));//不同輸出字符的差值為-1System.out.println(s.compareToIgnoreCase(s2));//輸出字符相同為0System.out.println(s.compareToIgnoreCase(s3));//前幾個字符相同,輸出長度差值為-2}
}    

在這里插入圖片描述

3.字符串查找

字符串查找也是字符串中非常常見的操作,String類提供的常用查找的方法:

方法功能
char charAt(int index)返回index位置上字符,如果index為負數或者越界,拋出IndexOutOfBoundsException異常
int indexOf(int ch)返回ch第一次出現的位置,沒有返回-1
int indexOf(int ch, int fromIndex)從fromIndex位置開始找ch第一次出現的位置,沒有返回-1
int indexOf(String str)返回str第一次出現的位置,沒有返回-1
int indexOf(String str, int fromIndex)從fromIndex位置開始找str第一次出現的位置,沒有返回-1
int lastIndexOf(int ch)從后往前找,返回ch第一次出現的位置,沒有返回-1
int lastIndexOf(int ch, int fromIndex)從fromIndex位置開始找,從后往前找ch第一次出現的位置,沒有返回-1
:int lastIndexOf(String str)從后往前找,返回str第一次出現的位置,沒有返回-1:
int lastIndexOf(String str, int fromIndex)從fromIndex位置開始找,從后往前找str第一次出現的位置,沒有返回-1
public class Test {public static void main(String[] args) {String s = "aaabbbcccaaabbbccc";System.out.println(s.charAt(3)); System.out.println(s.indexOf('c'));System.out.println(s.indexOf('c', 10));System.out.println(s.indexOf("bbb"));System.out.println(s.indexOf("bbb", 10));System.out.println(s.lastIndexOf('c'));System.out.println(s.lastIndexOf('c', 10));System.out.println(s.lastIndexOf("bbb"));System.out.println(s.lastIndexOf("bbb", 10));}
}

在這里插入圖片描述

4.轉換

1.數值和字符串轉換化

public class Test {public static void main(String[] args) {String s1 = String.valueOf(1234);String s2 = String.valueOf(12.34);String s3 = String.valueOf(true);System.out.println(s1);System.out.println(s2);System.out.println(s3);System.out.println("=================================");// 字符串轉數字// 注意:Integer、Double等是Java中的包裝類型int data1 = Integer.parseInt("1234");double data2 = Double.parseDouble("12.34");System.out.println(data1);System.out.println(data2);}
}

在這里插入圖片描述
2.大小寫轉換

public class Test {public static void main(String[] args) {String s = "hello";String s1 = "HELLO";System.out.println(s.toUpperCase());//小寫轉大寫System.out.println(s1.toLowerCase());//大寫轉小寫}
}    

在這里插入圖片描述
這兩個函數只轉換字母
3.字符串轉數組

public class Test {public static void main(String[] args) {String s = "hello";// 字符串轉數組char[] ch = s.toCharArray();for (int i = 0; i < ch.length; i++) {System.out.print(ch[i]);}System.out.println();// 數組轉字符串String s2 = new String(ch);System.out.println(s2);}
}

在這里插入圖片描述
4.格式化

public class Test {public static void main(String[] args) {String s = String.format("%d-%d-%d", 2019, 9,14);System.out.println(s);}
}

在這里插入圖片描述

5.字符串替換

使用一個指定的新的字符串替換掉已有的字符串數據,可用的方法如下:

方法功能
String replaceAll(String regex, String replacement)替換所有的指定內容
String replaceFirst(String regex, String replacement)替換收個內容
public class Test {public static void main(String[] args) {String s = "hellohello";System.out.println(s.replaceAll("l", "z"));System.out.println(s.replaceFirst("l", "z"));}
}    

在這里插入圖片描述
注意事項: 由于字符串是不可變對象, 替換不修改當前字符串, 而是產生一個新的字符串

6.字符串拆分

可以將一個完整的字符串按照指定的分隔符劃分為若干個子字符串
方法如下:

方法功能
String[] split(String regex)將字符串全部拆分
String[] split(String regex, int limit)將字符串以指定的格式,拆分為limit組
public class Test {public static void main(String[] args) {String str = "hello word is you";String[] s = str.split(" ");//按照空格拆分for (int i = 0; i < s.length; i++) {System.out.println(s[i]);}}
}

在這里插入圖片描述

public class Test {public static void main(String[] args) {String str = "hello word is you";String[] s = str.split(" ",2);//按照空格拆分成兩份for (int i = 0; i < s.length; i++) {System.out.println(s[i]);}}
}    

在這里插入圖片描述
拆分是特別常用的操作. 一定要重點掌握. 另外有些特殊字符作為分割符可能無法正確切分, 需要加上轉義
注意事項:
1.字符"|“,”*“,”+“都得加上轉義字符,前面加上 “\”
2.而如果是 “” ,那么就得寫成 “\\”
3.如果一個字符串中有多個分隔符,可以用”|"作為連字符
多次拆分:

public class Test {public static void main(String[] args) {String str = "name=zhagnsan&age=10";String[] s = str.split("&");for (String ss:s) {String[] ret = ss.split("=");for (String sss:ret) {System.out.println(sss);}}}
}

在這里插入圖片描述

7.字符串截取

從一個完整的字符串之中截取出部分內容
方法如下:

方法功能
String substring(int beginIndex)從指定索引截取到結尾
String substring(int beginIndex, int endIndex)截取部分內容
public class Test {public static void main(String[] args) {String str = "helloword";System.out.println(str.substring(5));System.out.println(str.substring(0, 5));}
}    

在這里插入圖片描述
注意事項
1.索引從0開始
2.注意前閉后開區間的寫法,substring(0,5)表示包含0下標的字符,不包含5下標的字符

8.其他操作方法

方法功能
String trim()去掉字符串中的左右空格,保留中間空格
String toUpperCase()字符串轉大寫
String toLowerCase()字符串轉小寫
public class Test {public static void main(String[] args) {String str = " hello word ";System.out.println(str.trim());}
}    

在這里插入圖片描述
trim 會去掉字符串開頭和結尾的空白字符(空格, 換行, 制表符等)

9.字符串的不可變性

String是一種不可變對象. 字符串中的內容是不可改變。字符串不可被修改,是因為:
1.String類在設計時就是不可改變的,String類實現描述中已經說明了
在這里插入圖片描述
String類中的字符實際保存在內部維護的value字符數組中,從上圖中可以看出:
1.String類被final修飾,表示該類不能被繼承
2.value被final修飾,表明value自身的值不能改變,即不能引用其它字符數組,但是其引用空間中的內容可以修改
2. 所有涉及到可能修改字符串內容的操作都是創建一個新對象,改變的是新對象
字符串不可變是因為其內部保存字符的數組被final修飾了,因此不能改變。
這種說法是錯誤的,不是因為String類自身,或者其內部value被final修飾而不能被修改。
final修飾類表明該類不想被繼承,final修飾引用類型表明該引用變量不能引用其他對象,但是其引用對象中的內容是可以修改的

10.字符串修改

注意: 盡量避免直接對String類型對象進行修改,因為String類是不能修改的,所有的修改都會創建新對象,效率非常低下

三、StringBuilder和StringBuffer

由于String的不可更改特性,為了方便字符串的修改,Java中又提供StringBuilder和StringBuffer類。這兩個類大部分功能是相同的

方法功能
StringBuff append(String str)在尾部追加,相當于String的+=,可以追加:boolean、char、char[]、double、float、int、long、Object、String、StringBuff的變量
char charAt(int index)獲取index位置的字符
int length()獲取字符串的長度
int capacity()獲取底層保存字符串空間總的大小
void ensureCapacity(int mininmumCapacity)擴容
void setCharAt(int index,char ch)將index位置的字符設置為ch
int indexOf(String str)返回str第一次出現的位置
int indexOf(String str, int fromIndex)從fromIndex位置開始查找str第一次出現的位置
int lastIndexOf(String str)返回最后一次出現str的位置
int lastIndexOf(String str,int fromIndex)從fromIndex位置開始找str最后一次出現的位置
StringBuff insert(int offset, String str)在offset位置插入:八種基類類型 & String類型 & Object類型數據
StringBuffer deleteCharAt(int index)刪除index位置字符
StringBuffer delete(int start, int end)刪除[start, end)區間內的字符
StringBuffer replace(int start, int end, String str)將[start, end)位置的字符替換為str
String substring(int start)從start開始一直到末尾的字符以String的方式返回
String substring(int start,int end)將[start, end)范圍內的字符以String的方式返回
StringBuffer reverse()反轉字符串
String toString()將所有字符按照String的方式返回

String和StringBuilder最大的區別在于String的內容無法修改,而StringBuilder的內容可以修改。頻繁修改字符串的情況考慮使用StringBuilder
注意: String和StringBuilder類不能直接轉換。如果要想互相轉換,可以采用如下原則:
1.String變為StringBuilder: 利用StringBuilder的構造方法或append()方法
2.StringBuilder變為String: 調用toString()方法

String、StringBuffer、StringBuilder的區別
1.String的內容不可修改,StringBuffer與StringBuilder的內容可以修改.
2.StringBuffer與StringBuilder大部分功能是相似的
3.StringBuffer采用同步處理,屬于線程安全操作;而StringBuilder未采用同步處理,屬于線程不安全操作

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164532.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164532.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164532.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言第二十五彈--打印菱形

C語言打印菱形 思路&#xff1a;想要打印一個菱形&#xff0c;可以分為上下兩部分&#xff0c;通過觀察可以發現上半部分星號的規律是 1 3 5 7故理解為 2對應行數 1 &#xff0c;空格是4 3 2 1故理解為 行數-對應行數-1。 上半部分代碼如下 for (int i 0;i < line;i){//上…

Vivado Modelsim聯合進行UVM仿真指南

打開Vivado&#xff0c;打開對應工程&#xff0c;點擊左側Flow Navigator-->PROJECT MANAGER-->Settings&#xff0c;打開設置面板。點擊Project Settings-->Simulation選項卡&#xff0c;如下圖所示。 將Target simulator設為Modelsim Simulator。 在下方的Compil…

OpenGL 繪制圓形平面(Qt)

文章目錄 一、簡介二、代碼實現三、實現效果一、簡介 這里使用一種簡單的思路來生成一個圓形平面: 首先,我們需要生成一個單位圓,半徑為1,法向量為(0, 0, 1),這一步我們可以使用一些函數生成圓形點集。之后,指定面片的索引生成一個圓形平面。當然這里為了后續管理起來方便…

Py之PyMuPDF:PyMuPDF的簡介、安裝、使用方法之詳細攻略

Py之PyMuPDF&#xff1a;PyMuPDF的簡介、安裝、使用方法之詳細攻略 目錄 PyMuPDF的簡介 PyMuPDF的安裝 PyMuPDF的使用方法 1、基礎用法 PyMuPDF的簡介 PyMuPDF是一個高性能的Python庫&#xff0c;用于PDF(和其他)文檔的數據提取&#xff0c;分析&#xff0c;轉換和操作。 …

Matrix

Matrix 如下是四種變換對應的控制參數&#xff1a; Rect 常用的一個“繪畫相關的工具類”&#xff0c;常用來描述長方形/正方形&#xff0c;他只有4個屬性&#xff1a; public int left; public int top; public int right; public int bottom; 這4個屬性描述著這一個“方塊…

基于JavaWeb+SSM+Vue校園水電費管理小程序系統的設計和實現

基于JavaWebSSMVue校園水電費管理小程序系統的設計和實現 源碼獲取入口Lun文目錄前言主要技術系統設計功能截圖訂閱經典源碼專欄Java項目精品實戰案例《500套》 源碼獲取 源碼獲取入口 Lun文目錄 摘 要 III Abstract 1 1 系統概述 2 1.1 概述 2 1.2課題意義 3 1.3 主要內容 3…

使用【畫圖】軟件修改圖片像素、比例和大小

打開電腦畫圖軟件&#xff0c;點擊開始 windows附件 畫圖 在畫圖軟件里選擇需要調整的照片&#xff0c;點擊文件 打開 在彈出窗口中選擇照片后點擊打開 照片在畫圖軟件中打開后&#xff0c;對照片進行調整。按圖中順序進行 確定后照片會根據設定的值自動調整 保存…

Codeforces Round 745 (Div. 2)(C:前綴和+滑動窗口,E:位運算加分塊)

Dashboard - Codeforces Round 745 (Div. 2) - Codeforces A&#xff1a; 答案就是2n!/2, 對于當前滿足有k個合法下標的排列&#xff0c;就是一個n-k個不合法的下標的排列&#xff0c; 所以每一個合法排列都相反的存在一個 對稱性 #include<bits/stdc.h> using nam…

【Redisson】基于自定義注解的Redisson分布式鎖實現

前言 在項目中&#xff0c;經常需要使用Redisson分布式鎖來保證并發操作的安全性。在未引入基于注解的分布式鎖之前&#xff0c;我們需要手動編寫獲取鎖、判斷鎖、釋放鎖的邏輯&#xff0c;導致代碼重復且冗長。為了簡化這一過程&#xff0c;我們引入了基于注解的分布式鎖&…

JS獲取時間戳的五種方法

一、JavasCRIPT時間轉時間戳 JavaScript獲得時間戳的方法有五種&#xff0c;后四種都是通過實例化時間對象new Date() 來進一步獲取當前的時間戳&#xff0c;JavaScript處理時間主要使用時間對象Date。 方法一&#xff1a;Date.now() Date.now()可以獲得當前的時間戳&#x…

思維模型 等待效應

本系列文章 主要是 分享 思維模型 &#xff0c;涉及各個領域&#xff0c;重在提升認知。越是等待&#xff0c;越是焦慮。 1 等待效應的應用 1.1 等待效應在管理中的應用 西南航空公司是一家美國的航空公司&#xff0c;它在管理中運用了等待效應。西南航空公司鼓勵員工在工作中…

快速學會使用Python3.12的新特性

一、 PEP 695: 類型形參語法的革新 PEP 695 在 Python 3.12 中引入了一種新穎且更為清晰的方式來定義泛型類和函數&#xff0c;旨在提升類型參數的明確性和簡潔性。這個提案不僅改善了類型系統的可讀性&#xff0c;還增強了其功能性。以下是這些變化的詳細概述&#xff1a; 1…

(四)C語言之符號常量概述

&#xff08;四&#xff09;C語言之符號常量概述 一、符號常量概述 一、符號常量概述 在程序中使用像300,20等這樣的等類似的“幻數”不是一個好的習慣&#xff0c;它們無法向閱讀該程序的人提供更多有用的信息&#xff0c;從而使得修改程序變得困難。處理這種幻數的一種方法是…

unreal 指定windows SDK

路徑 &#xff1a; “C:\Users\Administrator\AppData\Roaming\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml” 在Configuration中添加 <WindowsPlatform><WindowsSdkVersion>10.0.20348.0</WindowsSdkVersion></WindowsPlatform>示例&…

R數據分析:集成學習方法之隨機生存森林的原理和做法,實例解析

很久很久以前給大家寫過決策樹&#xff0c;非常簡單明了的算法。今天給大家寫隨機&#xff08;生存&#xff09;森林&#xff0c;隨機森林是集成了很多個決策數的集成模型。像隨機森林這樣將很多個基本學習器集合起來形成一個更加強大的學習器的這么一種集成思想還是非常好的。…

算法面試題:反轉一個整數

題目&#xff1a;反轉一個整數。例如&#xff0c;輸入123&#xff0c;輸出321&#xff1b;輸入-456&#xff0c;輸出-654。注意&#xff1a;反轉后的整數在32位帶符號整數范圍內。 編寫一個函數 reverseInteger(x: int) -> int 來實現這個功能。 答案&#xff1a; def re…

【前端】必學知識ES6 1小時學會

1.ES6概述 2.let和const的認識 3.let、const、var的區別 4.模板字符串 5.函數默認參數 6.箭頭函數【重點】 ?編輯7.對象初始化簡寫以及案例分析 【重點】 8.對象解構 8.對象傳播操作符 9.對象傳播操作符案例分析 ?編輯 10.數組Map 11.數組Reduce 12.NodeJS小結 …

代碼隨想錄算法訓練營第四十四天【動態規劃part06】 | 完全背包、518. 零錢兌換 II、377. 組合總和 Ⅳ

完全背包 有N件物品和一個最多能背重量為W的背包。第i件物品的重量是weight[i]&#xff0c;得到的價值是value[i] 。每件物品都有無限個&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解將哪些物品裝入背包里物品價值總和最大。 題目鏈接&#xff1a; 題目頁…

計算機畢業設計 基于Hadoop的物品租賃系統的設計與實現 Java實戰項目 附源碼+文檔+視頻講解

博主介紹&#xff1a;?從事軟件開發10年之余&#xff0c;專注于Java技術領域、Python人工智能及數據挖掘、小程序項目開發和Android項目開發等。CSDN、掘金、華為云、InfoQ、阿里云等平臺優質作者? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&#x1f3fb; 精…

YOLO目標檢測——泄露檢測數據集下載分享【含對應voc、coco和yolo三種格式標簽】

實際項目應用&#xff1a;泄露檢測數據集說明&#xff1a;泄露檢測數據集&#xff0c;真實場景的高質量圖片數據&#xff0c;數據場景豐富&#xff0c;含多個類別標簽說明&#xff1a;使用lableimg標注軟件標注&#xff0c;標注框質量高&#xff0c;含voc(xml)、coco(json)和yo…