Java字符串操作和C#字符串操作的不同小結(jié)
前言
每種語(yǔ)言都會(huì)有字符串的操作,因?yàn)樽址俏覀兤匠i_發(fā)使用頻率最高的一種類型。今天我們來(lái)聊一下Java的字符串操作及在某些具體方法中與C#的不同,對(duì)于需要熟悉多種語(yǔ)言的人來(lái)說(shuō),作為一種參考。進(jìn)行誡勉
首先,什么是字符串?
字符串是字符的序列,是作為一種對(duì)象而存在。說(shuō)的直白點(diǎn),字符串就是一些字符的組合,從而構(gòu)成字符串,例如“abc”就是字符串,"郭志奇"也是一種賜福穿。
我們知道,Java是一種面向?qū)ο蟮母呒?jí)程序語(yǔ)言。所有事物均為對(duì)象,字符串也不例外,也是一種對(duì)象,其對(duì)應(yīng)類型為String。
下面,我們分幾種情況來(lái)進(jìn)行說(shuō)明字符串:
1、字符串的創(chuàng)建
2、字符串操作
- 字符串連接
- 字符串長(zhǎng)度
- 字符串查找
- 獲取指定索引的字符
- 去重空格
- 判斷相等
- 大小寫轉(zhuǎn)換
- 字符串分隔
- 字符串比較
字符串創(chuàng)建
字符串必須先聲明并進(jìn)行初始化,才能使用,否則編譯器會(huì)報(bào)出 變量未初始化錯(cuò)誤。
請(qǐng)注意:Java中字符串定義的類型為String(第一個(gè)字母大寫),對(duì)于C#程序員來(lái)說(shuō),看著不太舒服,因?yàn)閏#中字符串定義為string (第一個(gè)字母小寫),但C#中也是有String類的
創(chuàng)建字符串也分幾種方式,可以根據(jù)需求靈活組織:
String(char a[])--Java代碼
char a[] = { 'a', 'b', 'c' }; String source = new String(a); System.out.println(source);//輸出結(jié)果為abc
String(char a[],int offset,int length)--Java代碼
char a[] = { 'a', 'b', 'c' }; String source = new String(a, 1, 2); System.out.println(source);//輸出為bc
字符串常量:
String source=“郭志奇”;
String source = "郭志奇"; String source1 = "郭志奇"; System.out.println(source == source1);// 輸出true System.out.println(source.equals(source1));// 輸出true
此處簡(jiǎn)單提一下,Java中雙等號(hào)== 表示的是引用是否相同,equals比較的是實(shí)際的字符串值。
對(duì)應(yīng)的C#代碼
string source = "郭志奇"; string source1 = "郭志奇"; Console.WriteLine(source==source1);//輸出True Console.WriteLine(source.Equals(source1));//輸出True Console.WriteLine(string.ReferenceEquals(source,source1));//輸出True Console.Read();
在C#中雙等號(hào)以及equals比較的是實(shí)際的值,而refreshEquals比較的是引用是否相同。和Java略有不同。
字符串操作
字符串連接
通過(guò)加號(hào)+可以將兩個(gè)字符串進(jìn)行連接。請(qǐng)注意,字符串與其他類型連接,會(huì)自動(dòng)調(diào)用其toString方法轉(zhuǎn)換成字符串,然后進(jìn)行拼接。
Java代碼:
String source = "郭志奇"; String source2 = "郭語(yǔ)晨"; String source3 = source + source2; System.out.println(source3);// 輸出郭志奇郭語(yǔ)晨 String source4 = source + 521;// 字符串與數(shù)字拼接 System.out.println(source4);//輸出郭志奇521
concat:字符串拼接
String source = "郭志奇"; String source2 = "郭語(yǔ)晨"; String source5 = source.concat(source2); System.out.println(source5);// 輸出郭志奇郭語(yǔ)晨
字符串長(zhǎng)度
通過(guò)length()方法獲取字符串長(zhǎng)度。請(qǐng)注意:包含字符串中空格的長(zhǎng)度。
Java代碼:
String source = " 郭志奇 ";//前綴包含一個(gè)空格及一個(gè)tab 后綴包含一個(gè)空格 System.out.println(source.length());// 輸出6
C#代碼:
找茬:從C#輸出的長(zhǎng)度可以看到,Tab在Java中長(zhǎng)度為1,而在C#長(zhǎng)度為2. 英文tab
string source = " 郭志奇 "; Console.WriteLine(source.Length);//輸出7
字符串查找
兩種字符串查找方法:
indexOf():從字符串開始位置進(jìn)行查找
String source = "郭志奇"; System.out.println(source.indexOf("郭"));// 輸出0 System.out.println(source.indexOf(""));// 輸出0
lastIndexOf()方法:從字符串結(jié)束位置開始查找
String source = "郭志奇"; System.out.println(source.lastIndexOf("郭"));// 輸出0 System.out.println(source.lastIndexOf(""));// 輸出3
找茬:indexOf查找空字符串,返回值是0。lastIndexOf方法查找空格,返回值是3.等于字符串的長(zhǎng)度。
查看lastIndexOf對(duì)應(yīng)的C#代碼實(shí)現(xiàn):
string source = "郭志奇"; Console.WriteLine(source.Length);//輸出3 Console.WriteLine(source.LastIndexOf(""));//輸出2 Console.Read();
通過(guò)對(duì)比lastIndexOf查找空字符串,可以發(fā)現(xiàn)C#和Java的不同,Java返回的是字符串的長(zhǎng)度,而C#返回的是字符串長(zhǎng)度-1。個(gè)人認(rèn)為C#的處理更符合目的。
獲取指定索引的字符
通過(guò)charAt方法獲取指定索引的字符
String source = "郭志奇"; System.out.println(source.charAt(0));//輸出郭 System.out.println(source.charAt(source.length() - 1));//輸出奇
為了學(xué)習(xí),我們就要思考,假如我輸入了負(fù)數(shù)或大于字符串長(zhǎng)度的索引會(huì)出現(xiàn)什么呢?代碼驗(yàn)證
String source = "郭志奇"; System.out.println(source.charAt(-1)); System.out.println(source.charAt(source.length() + 11));
沒(méi)錯(cuò),代碼執(zhí)行出錯(cuò)了,拋出異常:java.lang.StringIndexOutOfBoundsException
去重空格
通過(guò)trim方法移除字符串前后空格(包含tab)
String source = " 郭志奇 ";// 前后都有空格 String source1 = " 郭志奇 "; System.out.println(source.length()); System.out.println(source.trim().length()); System.out.println(source1.length()); System.out.println(source1.trim().length());
令人遺憾的是,Java沒(méi)有提供只清空前綴空格或后綴空格的方法。而C#卻有。
判斷相等
兩種判斷字符串相等的方法,雙等號(hào)及equals、equalsIgnoreCase
通過(guò)代碼來(lái)進(jìn)行說(shuō)明:
String source = new String("郭志奇A"); String source1 = new String("郭語(yǔ)晨"); String source2 = "郭志奇A"; String source3 = "郭語(yǔ)晨"; String source4 = "郭志奇a"; System.out.println(source == source2);// false System.out.println(source.equals(source2));// true System.out.println(source1 == source3);// false System.out.println(source1.equals(source3));// true System.out.println(source == source4);// false System.out.println(source.equals(source4));// false System.out.println(source.equalsIgnoreCase(source4));// true
雙等號(hào)代表的是字符串引用是否相同,對(duì)于不同對(duì)象的字符串,雙等號(hào)比較是不同的。
equals比較的是字符串的值,但區(qū)分大小寫
equalsIgnoreCase:比較的是字符串的值,不區(qū)分大小寫
進(jìn)行字符串比較,盡量避免使用雙等號(hào)。
大小寫轉(zhuǎn)換
toUpperCase轉(zhuǎn)換成大寫形式,toLowerCase轉(zhuǎn)換成小寫形式。但對(duì)于數(shù)字、空格則會(huì)忽略,不進(jìn)行轉(zhuǎn)換。比較簡(jiǎn)單
字符串分隔
通過(guò)split方法進(jìn)行字符串分隔,split參數(shù)是分隔符,返回值是分割后的字符串?dāng)?shù)組。較簡(jiǎn)單。
字符串比較
通過(guò)compareTo方法進(jìn)行字符串比較,
String source = "ab"; String source1 = "ba"; String source2 = "ab"; System.out.println(source.compareTo(source1));//返回值-1 System.out.println(source.compareTo(source2));//返回值0 System.out.println(source1.compareTo(source2));//返回值1 System.out.println(source.compareToIgnoreCase(source1));//返回值-1 System.out.println(source.compareToIgnoreCase(source2));//返回值0 System.out.println(source1.compareToIgnoreCase(source2));//返回值1
compareTo方法會(huì)逐個(gè)字符進(jìn)行比較,如果源字符串比目標(biāo)字符串大,那么返回正整數(shù);如果源字符串與目標(biāo)字符串相同,那么返回0;如果源字符串比目標(biāo)字符串小,那么返回負(fù)數(shù)。
請(qǐng)注意:
1、返回值為0,那么字符串通過(guò)equals比較會(huì)相同
2、返回值正整數(shù)、負(fù)數(shù),是源字符串不同的字符相減所得。
字符串使我們?nèi)粘i_發(fā)使用頻率最高的類型,因此要數(shù)量掌握字符串的各種操作,以及一些坑點(diǎn),才能在編碼中輕松、愉快的避免各種bug的出現(xiàn)。
本次說(shuō)明只介紹了字符串的冰山一角,對(duì)于更重要的字符串格式化,本次沒(méi)有涉及,因?yàn)榈暗白址袷交涂梢詥为?dú)寫一篇更長(zhǎng)的博文才能說(shuō)明。下次再聊。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Spring security如何實(shí)現(xiàn)記錄用戶登錄時(shí)間功能
這篇文章主要介紹了Spring security如何實(shí)現(xiàn)記錄用戶登錄時(shí)間功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Apache DolphinScheduler完全設(shè)置東八區(qū)時(shí)區(qū)
這篇文章主要為大家介紹了Apache DolphinScheduler完全設(shè)置東八區(qū)配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11Java 信號(hào)量Semaphore的實(shí)現(xiàn)
這篇文章主要介紹了Java 信號(hào)量Semaphore的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09spring boot idea maven依賴找不到問(wèn)題處理方法
這篇文章主要介紹了spring boot idea 偶爾maven依賴找不到問(wèn)題,這里總結(jié)了幾種處理方法,方便嘗試排查,對(duì)spring boot idea maven依賴找不到問(wèn)題感興趣的朋友跟隨小編一起看看吧2023-08-08SpringBoot整合Redisson實(shí)現(xiàn)分布式鎖
本文主要介紹了SpringBoot整合Redisson實(shí)現(xiàn)分布式鎖,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11