關於String類的基本操作,可分為以下幾類:
1、基本操作方法
2、字符串比較
3、字符串與其他數據類型之間的轉換
4、字符與字符串的查找
5、字符串的截取與拆分
6、字符串的替換與修改
我覺得在整理到下面的內容之前需要給自己提的醒是關於字符串的操作方法我們是不需要像其他操作一樣手動導包的,其String和StringBuffer等類封裝在java.lang包中,我們直接調用字符串方法即可!
一、String基本操作方法
首先說一下基本操作方法,字符串的基本操作方法中包含以下幾種:
(1)獲取字符串長度length()
(2)獲取字符串中的第i個字符charAt(i)
(3)獲取指定位置的字符方法getChars(4個參數)
1、 獲取字符串長度方法length()
格式:int length = str.length();
2、獲取字符串中的第i個字符方法charAt(i)
格式:char ch = str.charAt(i); //i為字符串的索引號,可得到字符串任意位置處的字符,保存到字符變量中
3、獲取指定位置的字符方法getChars(4個參數)
格式:char array[] = new char[80]; //先要創建以一個容量足夠大的char型數組,數組名為array
str.getChars(indexBegin,indexEnd,array,arrayBegin);
解釋一下括號中四個參數的指向意義:
1、indexBegin:需要復制的字符串的開始索引
2、 indexEnd: 需要復制的字符串的結束索引,indexEnd-1
3、array: 前面定義的char型數組的數組名
4、arrayBegin:數組array開始存儲的位置索引號
這樣我們就可以將字符串中想要的范圍內的字符都復制到字符數組中,將字符數組打印輸出即可。
與getChars()類似的方法有一個getBytes(),兩者使用上基本相同,只是getBytes()方法創建的是byte類型的數組,而byte編碼是默認字符集編碼,它是用編碼表示的字符。
下面就上代碼簡單演示一下三種方法的用法:
1 //String類基本操作方法 2 public class StringBasicOpeMethod { 3 public static void main(String args[]){ 4 String str = "如何才能變得像棋哥一樣優秀?算了吧,憋吹牛逼!"; //定義一個字符串 5 System.out.println(str); //輸出字符串 6 /***1、length()方法***/ 7 int length = str.length();//得到字符串長度 8 System.out.println("字符串的長度為:"+length); 9 /***2、charAt()方法***/ 10 char ch = str.charAt(7); //得到索引為7的字符 11 System.out.println("字符串中的第8個字符為:"+ch); 12 /***3、getChars()方法***/ 13 char chardst[] = new char[80]; //定義容量為80的字符數組,用於存儲從字符串中提取出的一串字符 14 str.getChars(0,14,chardst,0); 15 //System.out.println("字符數組中存放的內容為:"+chardst);//錯誤,輸出的是編碼 16 System.out.println(chardst); //**括號中不可帶其他字符串 17 } 18 }
運行結果如下:
二、字符串比較
我們知道,明確的數值之間可以很方便地進行比較,那么字符串該如何進行比較呢?字符串的比較是將兩個字符串從左到右逐個字符逐個字符進行比較,比較的依據是當前字符的Uncode編碼值,直到比較出兩個不同字符的大小。
字符串比較也分為兩大類:一類是字符串大小的比較,這樣的比較有三種結果,大於、等於以及小於;還有一類比較方法就是比較兩個字符串是否相等,這樣產生的比較結果無非就兩種,ture和false。
1、首先看一下第一種比較大小這類需求中的方法:
(1)不忽略字符串大小寫情況下字符串的大小比較方法compareTo(another str)
格式:int result = str1.compareTo(str2);
輸出三種比較結果:若該字符串的Unicode值<參數字符串的Unicode值,結果返回一負整數;若若該字符串的Unicode值=參數字符串的Unicode值,結果返回0;若該字符串的Unicode值>參數字符串的Unicode值,結果返回一正整數。
(2) 忽略字符串大小寫情況下字符串的大小比較方法compareTOIgnoreCase(another str)
格式:int result = str1.compareToIgnoreCase(str2);
在忽略字符串大小寫情況下,返回三種比較結果:輸出三種比較結果:若該字符串的Unicode值<參數字符串的Unicode值,結果返回一負整數;若若該字符串的Unicode值=參數字符串的Unicode值,結果返回0;若該字符串的Unicode值>參數字符串的Unicode值,結果返回一正整數。
2、然后看一下第二種判別兩種字符串是否相等(相等情況下必須保證二者長度相等)需求中的方法:
(1)不忽略字符串大小寫情況下判別字符串相等的方法eaquals(another str)
格式:boolean result = str1.equals(str2);
當且僅當str1和str2的長度相等,且對應位置字符的Unicode編碼完全相等,返回true,否則返回false
(2) 忽略字符串大小寫情況下判別字符串相等的方法equalsIgnoreCase(another str)
格式:boolean result = str1.equals(str2);
demo如下:
1 public class StringCompareMethod { 2 public static void main(String args[]){ 3 String str1 = "elapant"; 4 String str2 = "ELEPANT"; //定義兩個字符串 5 String str3 = "Apple"; 6 String str4 = "apple"; 7 /***1、compareTo方法***/ 8 //不忽略字符串字符大小寫 9 if(str1.compareTo(str2)>0){ 10 System.out.println(str1+">"+str2); 11 }else if(str1.compareTo(str2) == 0){ 12 System.out.println(str1+"="+str2); 13 }else{ 14 System.out.println(str1+"="+str2); 15 } 16 /***2、compareToIgnoreCase()方法***/ 17 //忽略字符串字符大小寫 18 if(str1.compareToIgnoreCase(str2)>0){ 19 System.out.println(str1+">"+str2); 20 }else if(str1.compareToIgnoreCase(str2) == 0){ 21 System.out.println(str1+"="+str2); 22 }else{ 23 System.out.println(str1+"<"+str2); 24 } 25 /***3、equals()方法***/ 26 //不忽略字符串字符大小寫 27 if(str3.equals(str4)){ 28 System.out.println(str3+"="+str4); 29 }else{ 30 System.out.println(str3+"!="+str4); 31 } 32 /***4、equalsIgnoreCase()方法***/ 33 //忽略字符串字符大小寫 34 if(str3.equalsIgnoreCase(str4)){ 35 System.out.println(str3+"="+str4); 36 }else{ 37 System.out.println(str3+"!="+str4); 38 } 39 } 40 }
運行結果如下:
三、字符串與其他數據類型的轉換
有時候我們需要在字符串與其他數據類型之間做一個轉換,例如將字符串數據變為整形數據,或者反過來將整形數據變為字符串類型數據,"20"是字符串,20就是整形數。我們都知道整形和浮點型之間可以利用強制類型轉換和自動類型轉換兩種機制實現兩者之間的轉換,那么"20"和20這兩種屬於不同類型的數據就需要用到String類提供的數據類型轉換方法了。
由於數據類型較多,因而轉換使用的方法也比較多,在此我就用一個表格羅列一下:
數據類型 | 字符串轉換為其他數據類型的方法 | 其它數據類型轉換為字符串的方法1 | 其他數據類型轉換為字符串的方法2 |
byte | Byte.parseByte(str) | String.valueOf([byte] bt) | Byte.toString([byte] bt) |
int | Integer.parseInt(str) | String.valueOf([int] i) | Int.toString([int] i) |
long | Long.parseLong(str) | String.valueOf([long] l) | Long.toString([long] l) |
float | Float.parseFloat(str) | String.valueOf([float] f) | Float.toString([float] f) |
double | double.parseDouble(str) | String.valueOf([double] d) | Double.toString([double] b) |
char | str.charAt() | String.valueOf([char] c) | Character.toString([char] c) |
boolean | Boolean.getBoolean(str) | String.valueOf([boolean] b) | Boolean.toString([boolean] b) |
簡單測試的小demo如下:
public class StringConvert { public static void main(String args[]){ /***將字符串類型轉換為其他數據類型***/ boolean bool = Boolean.getBoolean("false"); //字符串類型轉換為布爾類型 int integer = Integer.parseInt("20"); //字符串類型轉換為整形 long LongInt = Long.parseLong("1024"); //字符串類型轉換為長整形 float f = Float.parseFloat("1.521"); //字符串類型轉換為單精度浮點型 double d = Double.parseDouble("1.52123");//字符串類型轉換為雙精度浮點型 byte bt = Byte.parseByte("200"); //字符串類型轉換為byte型 char ch = "棋哥".charAt(0); /***將其他數據類型轉換為字符串類型方法1***/ String strb1 = String.valueOf(bool); //將布爾類型轉換為字符串類型 String stri1 = String.valueOf(integer); //將整形轉換為字符串類型 String strl1 = String.valueOf(LongInt); //將長整型轉換為字符串類型 String strf1 = String.valueOf(f); //將單精度浮點型轉換為字符串類型 String strd1 = String.valueOf(d); //將double類型轉換為字符串類型 String strbt1 = String.valueOf(bt); //將byte轉換為字符串類型 String strch1 = String.valueOf(ch); //將字符型轉換為字符串類型 } }
四、字符串查找
我們有時候需要在一段很長的字符串中查找我們需要的其中一部分字符串或者某個字符,String類恰恰提供了相應的查找方法,這些方法返回的都是目標查找對象在字符串中的索引值,所以都是整形值。具體分類情況如下:
字符串查找無非分為兩類:查找字符串和查找單個字符,而查找又可分為查找對象在字符串中第一次出現的位置和最后一次出現的位置,再擴展一步,我們可以縮小查找范圍,在指定范圍之內查找其第一次或最后一次出現的位置。
(1)查找字符出現的位置
1、indexOf()方法
格式:1、str.indexOf(ch);
2、str.indexOf(ch,fromIndex); //包含fromIndex位置
格式1返回指定字符在字符串中第一次出現位置的索引
格式2返回指定索引位置之后第一次出現該字符的索引號
2、lastIndexOf()方法
格式:1、str.lastIndexOf(ch);
2、str.lastIndexOf(ch,fromIndex);
格式1返回指定字符在字符串中最后一次出現位置的索引
格式2返回指定索引位置之前最后一次出現該字符的索引號
(2) 查找字符串出現的位置
1、indexOf()方法
格式:1、str.indexOf(str);
2、str.indexOf(str,fromIndex);
格式1返回指定子字符串在字符串中第一次出現位置的索引
格式2返回指定索引位置之前第一次出現該子字符串的索引號
2、lastIndexOf()方法
格式:1、str.lastIndexOf(str);
2、str.lastIndexOf(str,fromIndex);
格式1返回指定子字符串在字符串中最后一次出現位置的索引
格式2返回指定索引位置之前最后一次出現該子字符串的索引號
看代碼:
//字符與字符串查找 public class StringSearchChar { public static void main(String args[]){ String str = "How qi bocome handsome like qi ge"; //定義一個長字符串 System.out.println("該字符串為:"+str); /***1、indexOf()方法查找字符首個出現位置格式1,2***/ int index1 = str.indexOf(" "); //找到第一個空格所在的索引 int index2 = str.indexOf(" ",4); //找到索引4以后的第一個空格所在索引 System.out.println("第一個空格所在索引為:"+index1); System.out.println("索引4以后的第一個空格所在索引為:"+index2); System.out.println("*****************"); /***2、lastIndexOf()方法查找字符最后出現位置格式1,2***/ int index3 = str.lastIndexOf(" "); //找到最后一個空格所在的索引 int index4 = str.lastIndexOf(" ",10);//找到索引10以后的第一個空格所在索引 System.out.println("最后一個空格所在索引為:"+index3); System.out.println("索引10以前最后一個空格所在索引為:"+index4); System.out.println("*****************"); /***3、indexOf()方法查找子字符串第一次出現位置格式1,2***/ int index5 = str.indexOf("qi"); //找到"qi"子字符串第一次出現位置的索引 int index6 = str.indexOf("qi",5);//找到索引5以后子字符串"qi"第一個出現位置所在索引 System.out.println("子字符串qi第一次出現位置的索引號為:"+index5); System.out.println("索引5以后子字符串qi第一次出現位置的索引號為:"+index6); System.out.println("*****************"); /***4、lastIndexOf()方法查找子字符串最后一次出現位置格式1,2***/ int index7 = str.lastIndexOf("qi"); int index8 = str.lastIndexOf("qi",5); System.out.println("子字符串qi最后一次出現位置的索引號為:"+index7); System.out.println("索引號5以后子字符串qi最后一次出現位置的索引號為:"+index8); } }
結果截圖如下:
五、截取與拆分
這類方法是截取出一個長字符串中的一個子字符串或將字符串按照正則表達式的要求全部拆分保存到一個字符串數組中。具體方法如下所示:
(1) 截取方法
1、substring()方法
格式1:String result = str.substring(index);
格式2:String result = str.substring(beginIndex,EndIndex);//實際索引號[beginIndex,EndIndex-1]
結果:截取出范圍內的字符串
(2)拆分方法
1、split()方法
格式1 :String strArray[] = str.split(正則表達式);// 拆分的結果保存到字符串數組中
格式2:String strArray[] = str.split(正則表達式,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(); //獲取字符串長度,保存到變量中 System.out.println("字符串長度為:"+length); /***1、substring()方法截取出第一個單詞和最后一個單詞***/ //首先配合indexOf()和lastIndexOf()方法找到第一個單詞和最后一個單詞前后空格的索引號 //第一個單詞的左范圍索引為0,最后一個單詞的右范圍索引為length-1 int firstIndex = str.indexOf(' '); //找到第一個空格所在位置 int lastIndex = str.lastIndexOf(' '); //找到最后一個空格所在位置 System.out.println("第一個空格的索引號為:"+firstIndex); System.out.println("最后一個空格的索引號為:"+lastIndex); //利用substring()方法根據第一個和最后一個單詞的索引范圍截取出第一個和最后一個單詞 String firstWord = str.substring(0,firstIndex); //截取出第一個單詞 String lastWord = str.substring(lastIndex+1,length);//截取出最后一個單詞 System.out.println("第一個單詞為:"+firstWord); System.out.println("最后一個單詞為:"+lastWord); /***1、split()方法拆分出所有單詞***/ String stringArray[] = str.split(" "); //根據空格要求拆分出所有單詞保存到字符串數組中 System.out.println("拆分之后的各個詞匯為:"); //輸出提示信息 for(int i = 0;i<stringArray.length;i++){ System.out.print(stringArray[i]+"\t"); } } }
代碼執行結果如下:
六、替換或修改
終於到最后一類方法了,開心!!有時候我們需要對原字符串中的某些子字符串進行替換或修改,此時也需要String類提供的一些簡單快捷好用的方法啦
(1)concat()方法:合並字符串
格式:String result = str1.concat(str2); //將str1和str2合並
(2) toLowerCase()方法:將字符全部轉化為小寫
格式: String result = str.toLowerCase();
(3) toUpperCase()方法: 將字符全部轉化為大寫
格式:String result = str.toUpperCase();
(4)replaceAll()、replaceFirst()方法:需要匹配正則表達式
代碼如下:
//字符串替換與修改 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字符全部轉換為小寫***/ String str4 = str1.toLowerCase(); System.out.println("str1的字符全部轉換為小寫:"+str4); /***3、toUpperCase()方法將str2字符全部轉換為大寫***/ String str5 = str2.toUpperCase(); System.out.println("str2的字符全部轉換為大寫:"+str5); /***4、實現字符串的替換,原字符串內容不變***/ String str6 = str1.replaceFirst("(?i)VBASIC","C++"); String str7 = str2.replaceFirst("(?-i)VBASIC","C++"); System.out.println("替換后的str1:"+str6); System.out.println("替換后的str2:"+str7); } }
代碼運行結果截圖:
結束語
參考原文:https://blog.csdn.net/sjq__python_web/article/details/80099454