String字符串的基本使用

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

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

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

  • 包裝類 包裝類是把八大基本數(shù)據(jù)類型封裝到一個(gè)類中,并提供屬性和方法。 是為了更方便的操作基本數(shù)據(jù)類型,而不是取代基...
    什么時(shí)候養(yǎng)貓閱讀 391評(píng)論 0 0
  • 從網(wǎng)上復(fù)制的,看別人的比較全面,自己搬過(guò)來(lái),方便以后查找。原鏈接:https://www.cnblogs.com/...
    lxtyp閱讀 1,435評(píng)論 0 9
  • java.lang.String類代表字符串 程序中所有的雙引號(hào)字符串,都是String類的對(duì)象。 (1) 字符...
    yang嗯嗯閱讀 537評(píng)論 0 0
  • 在編寫程序的過(guò)程中,不了避免的要用到字符串,所以String類的常用方法的用法是必須掌握的。學(xué)習(xí)一個(gè)類的使用方法最...
    Geg_Wuz閱讀 1,491評(píng)論 0 4
  • 一講起這件事情來(lái),我的情緒還是很激動(dòng),這么多年來(lái)還是第一次差點(diǎn)跟客戶翻臉。她是一個(gè)大連孩子的媽媽,上午我剛結(jié)束營(yíng)養(yǎng)...
    bb_冰冰lovely閱讀 164評(píng)論 0 0

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