Java字符串String類操作方法詳細(xì)整理
?? ? ? 關(guān)于String類的基本操作,可分為以下幾類:
?? ? ? 1、基本操作方法
?? ? ? 2、字符串比較
?? ? ? 3、字符串與其他數(shù)據(jù)類型之間的轉(zhuǎn)換
?? ? ? 4、字符與字符串的查找
?? ? ? 5、字符串的截取與拆分
?? ? ? 6、字符串的替換與修改
?? ? ? ? 我覺(jué)得在整理到下面的內(nèi)容之前需要給自己提的醒是關(guān)于字符串的操作方法我們是不需要像其他操作一樣手動(dòng)導(dǎo)包的,其String和StringBuffer等類封裝在java.lang包中,我們直接調(diào)用字符串方法即可!
一、String基本操作方法
首先說(shuō)一下基本操作方法,字符串的基本操作方法中包含以下幾種:
(1)獲取字符串長(zhǎng)度length()
(2)獲取字符串中的第i個(gè)字符charAt(i)
(3)獲取指定位置的字符方法getChars(4個(gè)參數(shù))
1、 獲取字符串長(zhǎng)度方法length()
? ? 格式:int length = str.length();
2、獲取字符串中的第i個(gè)字符方法charAt(i)
? ? 格式:char ch = str.charAt(i);? //i為字符串的索引號(hào),可得到字符串任意位置處的字符,保存到字符變量中
3、獲取指定位置的字符方法getChars(4個(gè)參數(shù))
? ? 格式:char array[] = new char[80];? //先要?jiǎng)?chuàng)建以一個(gè)容量足夠大的char型數(shù)組,數(shù)組名為array
? ? str.getChars(indexBegin,indexEnd,array,arrayBegin);
? ? 解釋一下括號(hào)中四個(gè)參數(shù)的指向意義:
1、indexBegin:需要復(fù)制的字符串的開(kāi)始索引
2、 indexEnd:? ? 需要復(fù)制的字符串的結(jié)束索引,indexEnd-1
3、array:? ? ? ? ? ? 前面定義的char型數(shù)組的數(shù)組名
4、arrayBegin:數(shù)組array開(kāi)始存儲(chǔ)的位置索引號(hào)
這樣我們就可以將字符串中想要的范圍內(nèi)的字符都復(fù)制到字符數(shù)組中,將字符數(shù)組打印輸出即可。
與getChars()類似的方法有一個(gè)getBytes(),兩者使用上基本相同,只是getBytes()方法創(chuàng)建的是byte類型的數(shù)組,而byte編碼是默認(rèn)字符集編碼,它是用編碼表示的字符。
下面就上代碼簡(jiǎn)單演示一下三種方法的用法:
//String類基本操作方法
public class StringBasicOpeMethod {
?? public static void main(String args[]){
? ? ?? String str = "如何才能變得像棋哥一樣優(yōu)秀?算了吧,憋吹牛逼!"; //定義一個(gè)字符串
? ? ?? System.out.println(str);? //輸出字符串
? ? ?? /***1、length()方法***/
? ? ?? int length = str.length();//得到字符串長(zhǎng)度
? ? ?? System.out.println("字符串的長(zhǎng)度為:"+length);
? ? ?? /***2、charAt()方法***/
? ? ?? char ch = str.charAt(7);? //得到索引為7的字符
? ? ?? System.out.println("字符串中的第8個(gè)字符為:"+ch);
? ? ?? /***3、getChars()方法***/
? ? ?? char chardst[] = new char[80]; //定義容量為80的字符數(shù)組,用于存儲(chǔ)從字符串中提取出的一串字符
? ? ?? str.getChars(0,14,chardst,0);
? ? ?? //System.out.println("字符數(shù)組中存放的內(nèi)容為:"+chardst);//錯(cuò)誤,輸出的是編碼
? ? ?? System.out.println(chardst); //**括號(hào)中不可帶其他字符串
?? }
}
運(yùn)行結(jié)果如下:?

二、字符串比較
我們知道,明確的數(shù)值之間可以很方便地進(jìn)行比較,那么字符串該如何進(jìn)行比較呢?字符串的比較是將兩個(gè)字符串從左到右逐個(gè)字符逐個(gè)字符進(jìn)行比較,比較的依據(jù)是當(dāng)前字符的Uncode編碼值,直到比較出兩個(gè)不同字符的大小。
字符串比較也分為兩大類:一類是字符串大小的比較,這樣的比較有三種結(jié)果,大于、等于以及小于;還有一類比較方法就是比較兩個(gè)字符串是否相等,這樣產(chǎn)生的比較結(jié)果無(wú)非就兩種,ture和false。
?? ? 1、首先看一下第一種比較大小這類需求中的方法:
?? ? ? ? (1)不忽略字符串大小寫情況下字符串的大小比較方法compareTo(another str)
?? ? ? ? ? ? ? ? ? 格式:int result = str1.compareTo(str2);
?? ? ? ? ? ? ? ? 輸出三種比較結(jié)果:若該字符串的Unicode值<參數(shù)字符串的Unicode值,結(jié)果返回一負(fù)整數(shù);若若該字符串的Unicode值=參數(shù)字符串的Unicode值,結(jié)果返回0;若該字符串的Unicode值>參數(shù)字符串的Unicode值,結(jié)果返回一正整數(shù)。
?? ? ? ? (2)? 忽略字符串大小寫情況下字符串的大小比較方法compareTOIgnoreCase(another str)
?? ? ? ? ? ? ? ? ? 格式:int result = str1.compareToIgnoreCase(str2);
?? ? ? ? ? ? ? ? 在忽略字符串大小寫情況下,返回三種比較結(jié)果:輸出三種比較結(jié)果:若該字符串的Unicode值<參數(shù)字符串的Unicode值,結(jié)果返回一負(fù)整數(shù);若若該字符串的Unicode值=參數(shù)字符串的Unicode值,結(jié)果返回0;若該字符串的Unicode值>參數(shù)字符串的Unicode值,結(jié)果返回一正整數(shù)。
?? ? 2、然后看一下第二種判別兩種字符串是否相等(相等情況下必須保證二者長(zhǎng)度相等)需求中的方法:
?? ? ? ? ? ? (1)不忽略字符串大小寫情況下判別字符串相等的方法eaquals(another str)
?? ? ? ? ? ? ? ? ? 格式:boolean result = str1.equals(str2);
?? ? ? ? ? ? ? ? ? 當(dāng)且僅當(dāng)str1和str2的長(zhǎng)度相等,且對(duì)應(yīng)位置字符的Unicode編碼完全相等,返回true,否則返回false
?? ? ? ? ? ? (2)? 忽略字符串大小寫情況下判別字符串相等的方法equalsIgnoreCase(another str)
?? ? ? ? ? ? ? ? ? ? 格式:boolean result = str1.equals(str2);
? demo如下:
public class StringCompareMethod {
?? public static void main(String args[]){
? ? ?? String str1 = "elapant";
? ? ?? String str2 = "ELEPANT";? //定義兩個(gè)字符串
? ? ?? String str3 = "Apple";
? ? ?? String str4 = "apple";
? ? ?? /***1、compareTo方法***/
? ? ?? //不忽略字符串字符大小寫
? ? ?? if(str1.compareTo(str2)>0){
? ? ? ? ?? System.out.println(str1+">"+str2);
? ? ?? }else if(str1.compareTo(str2) == 0){
? ? ? ? ?? System.out.println(str1+"="+str2);
? ? ?? }else{
? ? ? ? ?? System.out.println(str1+"="+str2);
? ? ?? }
? ? ?? /***2、compareToIgnoreCase()方法***/
? ? ?? //忽略字符串字符大小寫
? ? ?? if(str1.compareToIgnoreCase(str2)>0){
? ? ? ? ?? System.out.println(str1+">"+str2);
? ? ?? }else if(str1.compareToIgnoreCase(str2) == 0){
? ? ? ? ?? System.out.println(str1+"="+str2);
? ? ?? }else{
? ? ? ? ?? System.out.println(str1+"<"+str2);
? ? ?? }
? ? ?? /***3、equals()方法***/
? ? ?? //不忽略字符串字符大小寫
? ? ?? if(str3.equals(str4)){
? ? ? ? ?? System.out.println(str3+"="+str4);
? ? ?? }else{
? ? ? ? ?? System.out.println(str3+"!="+str4);
? ? ?? }
? ? ?? /***4、equalsIgnoreCase()方法***/
? ? ?? //忽略字符串字符大小寫
? ? ?? if(str3.equalsIgnoreCase(str4)){
? ? ? ? ?? System.out.println(str3+"="+str4);
? ? ?? }else{
? ? ? ? ?? System.out.println(str3+"!="+str4);
? ? ?? }
?? }
}
運(yùn)行結(jié)果如下:?

三、字符串與其他數(shù)據(jù)類型的轉(zhuǎn)換
?? ? ? ? 有時(shí)候我們需要在字符串與其他數(shù)據(jù)類型之間做一個(gè)轉(zhuǎn)換,例如將字符串?dāng)?shù)據(jù)變?yōu)檎螖?shù)據(jù),或者反過(guò)來(lái)將整形數(shù)據(jù)變?yōu)樽址愋蛿?shù)據(jù),"20"是字符串,20就是整形數(shù)。我們都知道整形和浮點(diǎn)型之間可以利用強(qiáng)制類型轉(zhuǎn)換和自動(dòng)類型轉(zhuǎn)換兩種機(jī)制實(shí)現(xiàn)兩者之間的轉(zhuǎn)換,那么"20"和20這兩種屬于不同類型的數(shù)據(jù)就需要用到String類提供的數(shù)據(jù)類型轉(zhuǎn)換方法了。
? 由于數(shù)據(jù)類型較多,因而轉(zhuǎn)換使用的方法也比較多,在此我就用一個(gè)表格羅列一下:
數(shù)據(jù)類型字符串轉(zhuǎn)換為其他數(shù)據(jù)類型的方法其它數(shù)據(jù)類型轉(zhuǎn)換為字符串的方法1其他數(shù)據(jù)類型轉(zhuǎn)換為字符串的方法2
byteByte.parseByte(str)String.valueOf([byte] bt)Byte.toString([byte] bt)
intInteger.parseInt(str)String.valueOf([int] i)Int.toString([int] i)
longLong.parseLong(str)String.valueOf([long] l)Long.toString([long] l)
floatFloat.parseFloat(str)String.valueOf([float] f)Float.toString([float] f)
doubledouble.parseDouble(str)String.valueOf([double] d)Double.toString([double] b)
charstr.charAt()String.valueOf([char] c)Character.toString([char] c)
booleanBoolean.getBoolean(str)String.valueOf([boolean] b)Boolean.toString([boolean] b)
簡(jiǎn)單測(cè)試的小demo如下:
public class StringConvert {
public static void main(String args[]){
/***將字符串類型轉(zhuǎn)換為其他數(shù)據(jù)類型***/
boolean bool = Boolean.getBoolean("false"); //字符串類型轉(zhuǎn)換為布爾類型
int integer = Integer.parseInt("20"); //字符串類型轉(zhuǎn)換為整形
long LongInt = Long.parseLong("1024"); //字符串類型轉(zhuǎn)換為長(zhǎng)整形
float f = Float.parseFloat("1.521"); //字符串類型轉(zhuǎn)換為單精度浮點(diǎn)型
double d = Double.parseDouble("1.52123");//字符串類型轉(zhuǎn)換為雙精度浮點(diǎn)型
byte bt = Byte.parseByte("200"); //字符串類型轉(zhuǎn)換為byte型
char ch = "棋哥".charAt(0);
/***將其他數(shù)據(jù)類型轉(zhuǎn)換為字符串類型方法1***/
String strb1 = String.valueOf(bool); //將布爾類型轉(zhuǎn)換為字符串類型
String stri1 = String.valueOf(integer); //將整形轉(zhuǎn)換為字符串類型
String strl1 = String.valueOf(LongInt); //將長(zhǎng)整型轉(zhuǎn)換為字符串類型
// String strf1 = String.valueOf(f); //將單精度浮點(diǎn)型轉(zhuǎn)換為字符串類型
String strd1 = String.valueOf(d); //將double類型轉(zhuǎn)換為字符串類型
String strbt1 = String.valueOf(bt); //將byte轉(zhuǎn)換為字符串類型
String strch1 = String.valueOf(ch); //將字符型轉(zhuǎn)換為字符串類型
}
}
四、字符串查找
我們有時(shí)候需要在一段很長(zhǎng)的字符串中查找我們需要的其中一部分字符串或者某個(gè)字符,String類恰恰提供了相應(yīng)的查找方法,這些方法返回的都是目標(biāo)查找對(duì)象在字符串中的索引值,所以都是整形值。具體分類情況如下:
字符串查找無(wú)非分為兩類:查找字符串和查找單個(gè)字符,而查找又可分為查找對(duì)象在字符串中第一次出現(xiàn)的位置和最后一次出現(xiàn)的位置,再擴(kuò)展一步,我們可以縮小查找范圍,在指定范圍之內(nèi)查找其第一次或最后一次出現(xiàn)的位置。
? (1)查找字符出現(xiàn)的位置
?? ? ? ? ? 1、indexOf()方法
?? ? ? ? ? ? ? ? 格式:1、str.indexOf(ch);
?? ? ? ? ? ? ? ? ? ? ? ? ? 2、str.indexOf(ch,fromIndex); //包含fromIndex位置
?? ? ? ? ? ? ? ? 格式1返回指定字符在字符串中第一次出現(xiàn)位置的索引?
?? ? ? ? ? ? ? ? 格式2返回指定索引位置之后第一次出現(xiàn)該字符的索引號(hào)
?? ? ? ? ? 2、lastIndexOf()方法
?? ? ? ? ? ? ? ? 格式:1、str.lastIndexOf(ch);
?? ? ? ? ? ? ? ? ? ? ? ? ? 2、str.lastIndexOf(ch,fromIndex);
?? ? ? ? ? ? ? ? 格式1返回指定字符在字符串中最后一次出現(xiàn)位置的索引
?? ? ? ? ? ? ? ? 格式2返回指定索引位置之前最后一次出現(xiàn)該字符的索引號(hào)
? (2)? 查找字符串出現(xiàn)的位置
?? ? ? ? ? 1、indexOf()方法?
?? ? ? ? ? ? ? 格式:1、str.indexOf(str);
?? ? ? ? ? ? ? ? ? ? ? ? 2、str.indexOf(str,fromIndex);
?? ? ? ? ? ? ? 格式1返回指定子字符串在字符串中第一次出現(xiàn)位置的索引
?? ? ? ? ? ? ? 格式2返回指定索引位置之前第一次出現(xiàn)該子字符串的索引號(hào)
?? ? ? ? ? 2、lastIndexOf()方法
?? ? ? ? ? ? ? ? 格式:1、str.lastIndexOf(str);
?? ? ? ? ? ? ? ? ? ? ? ? ? 2、str.lastIndexOf(str,fromIndex);
?? ? ? ? ? ? ? ? 格式1返回指定子字符串在字符串中最后一次出現(xiàn)位置的索引
?? ? ? ? ? ? ? ? 格式2返回指定索引位置之前最后一次出現(xiàn)該子字符串的索引號(hào)
看代碼:
//字符與字符串查找
public class StringSearchChar {
public static void main(String args[]){
String str = "How qi bocome handsome like qi ge"; //定義一個(gè)長(zhǎng)字符串
System.out.println("該字符串為:"+str);
/***1、indexOf()方法查找字符首個(gè)出現(xiàn)位置格式1,2***/
int index1 = str.indexOf(" "); //找到第一個(gè)空格所在的索引
int index2 = str.indexOf(" ",4); //找到索引4以后的第一個(gè)空格所在索引
System.out.println("第一個(gè)空格所在索引為:"+index1);
System.out.println("索引4以后的第一個(gè)空格所在索引為:"+index2);
System.out.println("*****************");
/***2、lastIndexOf()方法查找字符最后出現(xiàn)位置格式1,2***/
int index3 = str.lastIndexOf(" "); //找到最后一個(gè)空格所在的索引
int index4 = str.lastIndexOf(" ",10);//找到索引10以后的第一個(gè)空格所在索引
System.out.println("最后一個(gè)空格所在索引為:"+index3);
System.out.println("索引10以前最后一個(gè)空格所在索引為:"+index4);
System.out.println("*****************");
/***3、indexOf()方法查找子字符串第一次出現(xiàn)位置格式1,2***/
int index5 = str.indexOf("qi"); //找到"qi"子字符串第一次出現(xiàn)位置的索引
int index6 = str.indexOf("qi",5);//找到索引5以后子字符串"qi"第一個(gè)出現(xiàn)位置所在索引
System.out.println("子字符串qi第一次出現(xiàn)位置的索引號(hào)為:"+index5);
System.out.println("索引5以后子字符串qi第一次出現(xiàn)位置的索引號(hào)為:"+index6);
System.out.println("*****************");
/***4、lastIndexOf()方法查找子字符串最后一次出現(xiàn)位置格式1,2***/
int index7 = str.lastIndexOf("qi");
int index8 = str.lastIndexOf("qi",5);
System.out.println("子字符串qi最后一次出現(xiàn)位置的索引號(hào)為:"+index7);
System.out.println("索引號(hào)5以后子字符串qi最后一次出現(xiàn)位置的索引號(hào)為:"+index8);
}
}
結(jié)果截圖如下:?

五、截取與拆分
這類方法是截取出一個(gè)長(zhǎng)字符串中的一個(gè)子字符串或?qū)⒆址凑照齽t表達(dá)式的要求全部拆分保存到一個(gè)字符串?dāng)?shù)組中。具體方法如下所示:
(1) 截取方法
?? ? ? 1、substring()方法? ?
?? ? ? ? ? ? 格式1:String result = str.substring(index);
?? ? ? ? ? ? 格式2:String result = str.substring(beginIndex,EndIndex);//實(shí)際索引號(hào)[beginIndex,EndIndex-1]
?? ? ? ? ? ? 結(jié)果:截取出范圍內(nèi)的字符串
(2)拆分方法
?? ? ? 1、split()方法
?? ? ? ? ? ? 格式1 :String strArray[] = str.split(正則表達(dá)式);// 拆分的結(jié)果保存到字符串?dāng)?shù)組中
?? ? ? ? ? ? 格式2:String strArray[] = str.split(正則表達(dá)式,limit);
代碼示例如下:
//字符串截取與拆分
public class StringCutAndSplit {
public static void main(String args[]){
String str = "How to cut and split strings"; //定義字符串
System.out.println("字符串為:"+str);
int length = str.length(); //獲取字符串長(zhǎng)度,保存到變量中
System.out.println("字符串長(zhǎng)度為:"+length);
/***1、substring()方法截取出第一個(gè)單詞和最后一個(gè)單詞***/
//首先配合indexOf()和lastIndexOf()方法找到第一個(gè)單詞和最后一個(gè)單詞前后空格的索引號(hào)
//第一個(gè)單詞的左范圍索引為0,最后一個(gè)單詞的右范圍索引為length-1
int firstIndex = str.indexOf(' '); //找到第一個(gè)空格所在位置
int lastIndex = str.lastIndexOf(' '); //找到最后一個(gè)空格所在位置
System.out.println("第一個(gè)空格的索引號(hào)為:"+firstIndex);
System.out.println("最后一個(gè)空格的索引號(hào)為:"+lastIndex);
//利用substring()方法根據(jù)第一個(gè)和最后一個(gè)單詞的索引范圍截取出第一個(gè)和最后一個(gè)單詞
String firstWord = str.substring(0,firstIndex); //截取出第一個(gè)單詞
String lastWord = str.substring(lastIndex+1,length);//截取出最后一個(gè)單詞
System.out.println("第一個(gè)單詞為:"+firstWord);
System.out.println("最后一個(gè)單詞為:"+lastWord);
/***1、split()方法拆分出所有單詞***/
String stringArray[] = str.split(" "); //根據(jù)空格要求拆分出所有單詞保存到字符串?dāng)?shù)組中
System.out.println("拆分之后的各個(gè)詞匯為:"); //輸出提示信息
for(int i = 0;i<stringArray.length;i++){
System.out.print(stringArray[i]+"\t");
}
}
}
代碼執(zhí)行結(jié)果如下:

六、替換或修改
終于到最后一類方法了,開(kāi)心??!有時(shí)候我們需要對(duì)原字符串中的某些子字符串進(jìn)行替換或修改,此時(shí)也需要String類提供的一些簡(jiǎn)單快捷好用的方法啦
(1)concat()方法:合并字符串
?? ? ? ? 格式:String result = str1.concat(str2);? //將str1和str2合并
? (2)? toLowerCase()方法:將字符全部轉(zhuǎn)化為小寫
?? ? ? ? 格式:? String result = str.toLowerCase();
? (3)? toUpperCase()方法: 將字符全部轉(zhuǎn)化為大寫
?? ? ? ? 格式:String result = str.toUpperCase();? ? ? ? ?
? (4)replaceAll()、replaceFirst()方法:需要匹配正則表達(dá)式? ? ? ?
代碼如下:
//字符串替換與修改
public class StringFindandReplace {
public static void main(String args[]){
String str1 = "vbasic";
String str2 = "Vbasic";
System.out.println("str1 = "+str1);
System.out.println("str2 = "+str2);
/***1、concat()方法將兩字符串合并***/
String str3 = str1.concat(str2);
System.out.println("str1和str2合并后的字符串為:"+str3);
/***2、toLowerCase()方法將str1字符全部轉(zhuǎn)換為小寫***/
String str4 = str1.toLowerCase();
System.out.println("str1的字符全部轉(zhuǎn)換為小寫:"+str4);
/***3、toUpperCase()方法將str2字符全部轉(zhuǎn)換為大寫***/
String str5 = str2.toUpperCase();
System.out.println("str2的字符全部轉(zhuǎn)換為大寫:"+str5);
/***4、實(shí)現(xiàn)字符串的替換,原字符串內(nèi)容不變***/
String str6 = str1.replaceFirst("(?i)VBASIC","C++");
String str7 = str2.replaceFirst("(?-i)VBASIC","C++");
System.out.println("替換后的str1:"+str6);
System.out.println("替換后的str2:"+str7);
}
}
代碼運(yùn)行結(jié)果截圖:

結(jié)束語(yǔ)
參考原文:https://blog.csdn.net/sjq__python_web/article/details/80099454