国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

黑馬程序員——String類

2019-11-14 15:07:21
字體:
來源:轉載
供稿:網友

------<a target="blank">java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! -------

 String類

(一). 認識String

  字符串是一個特殊的對象,一旦初始化就不可改變。

有兩種方式定義一個字符串對象:

  (1)String str = “abc”; //它在執行時是在字符串常量池中創建一個對象,并把地址賦給引用型變量

  (2)String str1 = new String("abc");//它在執行時是在堆內存中,創建了兩個對象,用new方式創建了一個字符串對象;緊接著在構造時,又接收了一個字符串對象。

  String s = new String();//等效于String s = “”; //不等效于String s = null;   因為前兩者都是創建了一個空的字符串,最后一個是常量值空

特別注意兩者的區別

  雖然str、str1的值都為“abc”,但是其引用地址是不一樣的。所以str不等于str1,但是如果定義String str2 = “abc”;這時如果將str2與str比較,兩者是等同的,因為

在字符串常量池中創建對象時,會先查找該常量池中是否存在該內容,如果存在就直接把引用地址賦給變量,如果池中不存在才新建一個。

1.1 String功能

  (1)獲取(牢記)

  • 獲取字符串長度:int length()  //注意在數組中length是屬性,但在string中length是方法
  • 根據位置獲取字符:char charAt(int index);
  • 根據字符獲取字符在字符串中第一次出現的位置:int indexOf(int char);//可以放整形,或者char類型,都可以解析出來
  • 從指定位置查找字符在字符串中第一次出現的位置:int indexOf(int char,int fromIndex);
  • 獲取子字符串在字符串中第一次出現的位置:int indexOf(String str);
  • 從指定位置查找子字符串在字符串中的位置:int indexOf(String str,int fromIndex);
  • 返回指定字符在字符串中最后一次出現的位置:int lastIndexOf(int char);
  • 返回指定字符在此字符串中最后一次出現處的索引,從指定的索引處開始進行反向搜索:int lastIndexOf(int char,int fromIndex);
  • 返回指定字符串在字符串中最后一次出現的位置,反向索引:int lastIndexOf(String str);
  • 返回指定子字符串在此字符串中最后一次出現處的索引,從指定的索引開始反向搜索:int lastIndexOf(String str,int fromIndex);
  • 獲取字符串的子串:String substring(int beginIndex,int endIndex); //包含開始,不包含結尾

實踐見真知

 1 public class StringDemo { 2     public static void main(String[] args){ 3         StringPRacticeDemo(); 4     } 5     public static void StringPracticeDemo() { 6         String s = "abcdefeagkl"; 7         System.out.println("length:"+s.length());//10 8         System.out.println("At:"+s.charAt(4));//e 9         System.out.println("indexOf:"+s.indexOf('k'));//810         System.out.println("indexOf:"+s.indexOf('m')  );//11         //indexOf有兩個作用,1是索引位置,2是判斷存在,如果不存在就返回-1,我們可以通過返回值來判斷該字符存在不存在12         System.out.println("lastIndexOf:"+s.lastIndexOf('a'));//713         System.out.println("indexOf str:"+s.indexOf("def"));//314         System.out.println("lastIndex str:"+s.lastIndexOf("eag"));//615         16         //獲取子串17         System.out.println("substring:"+s.substring(6));18         //包含開始,不包含結尾  該子字符串從指定的 beginIndex 處開始,直到索引 endIndex - 1 處的字符19         System.out.println("substring:"+s.substring(6,9));    20     }21 }

   (2)轉換

  • 把字符串變成字符串數組(字符串切割):String[] split(regex);//設計到正則表達式
  • 字符串變成字符數組:char[] toCharArray();
  • 字符串變成字節數組:byte[] getBytes();
  • 字符串字母轉換大小寫:String toUpperCase(); String toLowerCase();
  • 將字符串中的內容進行替換:String replace(ch oldCh,ch newCh);//如果替換成功返回一個新串(因為字符串一初始化就已經固定),如果替換不成功則返回原字符串。
  • 字符串進行替換:String replace(String str1,String str2);// 后者替換前者
  • 去除字符串兩端的空格:String trim();
  • 將字符串進行連接:String concat(String str);
  • 將基本數據類型變成字符串:String valueOf();

實踐真知

 1 public class StringDemo { 2     public static void main(String[] args){ 3         StringPracticeDemo1(); 4     } 5     public static void StringPracticeDemo1() { 6         //字符串切割 7         String str = "張三,李四,王五"; 8         String[] names = str.split(","); 9         for(String name : names){10             System.out.println(name);11         }12         //字符串轉字符數組13         String  str1 = "abcdef";14         char[] ch = str1.toCharArray();15         for(int i=0;i<ch.length;i++){16             if(i<ch.length-1){17                 System.out.print(ch[i]+",");18             }else{19                 System.out.println(ch[i]);//a,b,c,d,e,f20             }     21         }22         //字符串轉字節數組23         byte[] by = str1.getBytes();24         for(int i=0;i<by.length;i++){25             if(i<by.length-1){26                 System.out.print(by[i]+",");27             }else{28                 System.out.println(by[i]);//97,98,99,100,101,10229             }     30         }31         //字符串大小寫轉換32         System.out.println(str1.toUpperCase());//ABCDEF33         System.out.println("AVBCD".toLowerCase());//avbcd34         //字符串連接35         String str2 = str1.concat("abc");36         System.out.println(str2);//abcdefabc37         //字符串替換38         String str3 = str2.replace("abc", "cba");39 //        String str3 = str2.replace("abd", "cba");//abcdefabc如果找不到則返回原串40         System.out.println(str3);41         //去除字符串兩端空格42         String str4 = "   -abc  d-  ";43         System.out.println(str4.trim());//-abc  d-44         //將基本數據類型轉換為字符串45         int c = 5+1;46         String b = "";47         System.out.println("b="+b.valueOf(c));//b=648     }49 }

   (3)判斷

  • 判斷字符串是否相同:boolean equals(Object obj);    boolean equalsIgnoreCase(String str);//忽略大小寫進行比較
  • 字符串中是否包含子字符串:boolean contains(String str);  可以用indexOf來替換,返回-1代表不包含
  • 字符串是否以指定字符串開頭,是否以指定字符串結尾:boolean startsWith(string);   boolean endsWith(string);

實踐見真知

 1 public class StringDemo { 2     public static void main(String[] args){ 3         StringPracticeDemo2(); 4     } 5     public static void StringPracticeDemo2() { 6         //比較,忽略大小寫比較 7         String s1 = "abc"; 8         String s2 = "ABC"; 9         System.out.println(s1.equals(s2));//false10         System.out.println(s1.equalsIgnoreCase(s2));//true11     12         //是否包含某個字符串13         String s3 = "abcdfaf";14         System.out.println(s3.contains("cdfe"));//false15         16         //是否以指定字符串開始,已制定字符串結尾17         String s4="Hello.java";18         System.out.println(s4.startsWith("Hel"));//true19         System.out.println(s4.endsWith(".java"));//true20     }21     

  (4)比較

  • 比較兩個字符串的大小(按照字典順序):int compareTo(String anotherString)  //如果參數字符串等于此字符串,則返回值 0;如果此字符串按字典順序小于字符串參數,則返回一個小于 0 的值;如果此字符串按字典順序大于字符串參數,則返回一個大于 0 的值。
  • 返回字符串的規范化表示形式:String intern();

實踐見真知

 1 public class StringDemo { 2     public static void main(String[] args){ 3         StringPracticeDemo3(); 4     } 5     public static void StringPracticeDemo3() { 6         String s6 = new String("alsjf"); 7         String s7 = "asvsd"; 8         System.out.println(s6.compareTo(s7));//-7 s6小于s7 9         10         String s8 = s6.intern();11         System.out.println(s6==s8);//false 是因為intern方法是從字符串池中創建,而s6是在堆內存中12     }

 

 (二). StringBuffer字符串緩沖區(可變長度數組)

2.1  StringBuffer特點

  • StringBuffer是一個可變長度的容器
  • 可以存儲不同類型數據
  • 最終要轉成字符串進行使用(輸出的全是字符串,最終用的時候都是變成字符串才能取用)
  • 可以對字符串進行修改

2.2  StringBuffer功能

2.2.1  添加功能

  • StringBuffer  append(Data)————往容器中添加數據
  • StringBuffer  insert(index,data)————在某個位置上插入數據

實踐見真知

 1 public class StringBufferDemo { 2     public static void main(String[] args) { 3         StringBuffer sb = new StringBuffer(); 4         //添加功能 5         sb.append(9+"11").append("nihao");//添加鏈 6         sb.append(true); 7         System.out.println(sb);//911nihaotrue 8         //插入功能 9         sb.insert(3, "hehe");10         System.out.println(sb);//411hehenihaotrue11     }12 }

2.2.2  刪除功能

  • StringBuffer  delete(start,end)————刪除緩沖區中的元素,指定開頭,不包含結尾
  • StringBuffer  deleteCharAt(int index)————刪除指定位置上的元素

實踐見真知

 1 public class StringBufferDemo { 2     public static void main(String[] args) { 3         Demo_2(); 4     } 5     public static void Demo_2() { 6         StringBuffer sb = new StringBuffer(); 7         sb.append("abcdefgh"); 8         sb.deleteCharAt(3);//刪除指定位置上的字符 9         System.out.println(sb);//abcefgh10         sb.delete(2, 5);//刪除包含頭元素,不包含尾元素11         System.out.println(sb);//abgh12         sb.delete(0, sb.length());//該方法是清空緩沖區13         System.out.println(sb.length());//014     }15 }

2.2.3  查找功能(與string的獲取功能類似)

  • char charAt(index)————查找某個位置上的字符
  • int indexOf(String str)————獲取子字符串在字符串中第一次出現的位置
  • int lastIndexOf(String str)————獲取子字符串在字符串中最后一次出現的位置

實踐見真知

 1 public class StringBufferDemo { 2     public static void main(String[] args) { 3         Demo_3(); 4     } 5     public static void Demo_3() { 6         StringBuffer sb = new StringBuffer(); 7         sb.append("abcdefg"); 8         char ch = sb.charAt(3);//返回字符串上某個位置的元素 9         System.out.println(ch);//d10         11         int i = sb.indexOf("cde");//返回子串在主串上的位置12         System.out.println(i);//213         14         int j = sb.lastIndexOf("de");15         System.out.println(j);//316         17         int x = sb.indexOf("ef", 3);//從指定位置上查找子串所在位置18         System.out.println(x);//419     }20 }

2.2.4  修改功能

  • StringBuffer  replace( start, end, string)————替換字符串,包含開頭,不包含結尾
  • void  setCharAt(index,char)————在指定位置上插入某個字符

實踐見真知

 1 public class StringBufferDemo { 2     public static void main(String[] args) { 3         Demo_4(); 4     } 5     public static void Demo_4() { 6         StringBuffer sb = new StringBuffer(); 7         sb.append("abcdefg"); 8         sb.replace(1, 4, "123");//包含開頭元素,不包含結尾 9         System.out.println(sb);//a123efg10 //        sb.replace(0, sb.length(), "");//這就相當于清空緩沖區11 //        System.out.println(sb.length());//012         13         sb.setCharAt(5, 'x');//在指定位置上插入某個字符14         System.out.println(sb);//a123exg15     }16 }

2.2.5  額外功能

  • void setLength(int newlength)————設置字符串緩沖區的長度,當長度設置為0時,相當于清空緩沖區
  • StringBuffer  reverse()————將此字符序列用其反轉形式取代

實踐見真知

 1 public class StringBufferDemo { 2     public static void main(String[] args) { 3         Demo_5(); 4     } 5     public static void Demo_5() { 6         StringBuffer sb = new StringBuffer(); 7         sb.append("abcdefg"); 8         //字符串反轉 9         sb.reverse();10         System.out.println(sb);//gfedcba11         //設置字符串長度,當設置為0時,相當于清空緩沖區12         sb.setLength(0);13         System.out.println(sb.length());//014     }15 }

2.2.6  構造方法StringBuffer()與StringBuffer(int capacity)的區別

  StringBuffer()構造方法,是構造一個不帶字符串的字符串緩沖區,初始容量為16個字符。當超過該容量時,可繼續增加容量。而StringBuffer(int capacity)是構造一個固定長度的字符串緩沖區,但是當超過該固定容量時,依然可以繼續擴展容量。二者的區別在于效率方面。當已知自己有35個字符的數據時,直接創建StringBuffer(40),效率更高。否則如果使用StringBuffer()創建,當發現容量不足時,還要繼續創建,將會降低效率。

2.2.7  StringBuilder

  從jdk1.5才開始出現StringBuilder,不保證同步,線程不安全,但是效率高,單線程時優先考慮使用StringBuilder

 


 

(三).  StringBuffer與StringBuilder的區別

  相同點:兩者功能相同,使用方法相同

  不同點:jdk1.0開始出現StringBuffer,線程安全,同步,多用于多線程

      jdk1.5以后出現了和StringBuffer功能一樣的StringBuilder,不保證同步,線程不安全,但是效率高,通常用于單線程

      StringBuilder的出現是為了解決StringBuffer在處理單線程時效率慢問題,提高緩沖區的效率而出現的。

對比數組與StringBuffer或StringBuilder緩沖區:

 1 public class StingBuilderDemo { 2     /** 3      * 需求:將一個int數組變成字符串  ,分別用數組、緩沖區方式 輸出 4      * 對比使用數組與使用緩沖區的區別 5      * @param args 6      */ 7     public static void main(String[] args) { 8         int[] arr = {2,5,8,33,23,6}; 9 //        ShowArr(arr);10         String s = StringBuilderDemo(arr);11         System.out.println(s);12     }13     //使用緩沖區方式14     public static String StringBuilderDemo(int[] arr) {15         StringBuilder sb = new StringBuilder();16         System.out.print("{");17         for (int i = 0; i < arr.length; i++) {18             if(i!=arr.length-1){19                 sb.append(arr[i]+",");20             }else{21                 sb.append(arr[i]+"}");22             }23         }24         return sb.toString();    25     }26 27     //使用數組方式28     public static void ShowArr(int[] arr) {29         System.out.print("{");30         for (int i = 0; i < arr.length; i++) {31             if(i!=arr.length-1){32                 System.out.print(arr[i]+",");33             }else{34                 System.out.println(arr[i]+"}");35             }36         }        37     }38 39 

  結論:使用數組方式輸出時,每遍歷一次,連接一次“,” 如:( System.out.print(arr[i]+",");)就會在字符串常量池中產生一個常量,當全部輸出字符串時會在常量池中產生n多個常量。而使用StringBuffer或StringBuilder的方式,不斷的往數組中裝,最后只返回一個字符串。


(四).  實踐見真知

 實踐一

 1 package com.itsuper.p3.String; 2  3 public class Practice1 { 4  5     /** 6      * 將字符串數組按照字典順序進行排序 7      * "nba","abc","cba","zz","QQ","haha" 8      * @param args 9      */10     public static void main(String[] args) {11         String[] arr = {"nba","abc","cba","zz","qq","haha"};12         printArray(arr);13         sortArray(arr);14         printArray(arr);15     }16 17     public static void sortArray(String[] arr) {18         for (int i = 0; i < arr.length-1; i++) {19             for (int j = i+1; j < arr.length; j++) {20                 if((arr[i].compareTo(arr[j])>0)){21                     swap(arr,i,j);22                 }23             }24         }25     }26     //交換功能27     private static void swap(String[] arr, int i, int j) {28         String temp = arr[j];29         arr[j] = arr[i];30         arr[i] = temp;31     }32 33     //打印功能34     public static void printArray(String[] arr) {35         for(int i=0;i<arr.length;i++){36             if(i!=arr.length-1){37                 System.out.print(arr[i]+",");38             }else{39                 System.out.println(arr[i]);40             }41         }42         43     }44 45 }

 

實踐二 

 1 package com.itsuper.p3.String; 2  3 public class Practice2 { 4  5     /** 6      * 查找子串nba在字符串中出現的次數 7      * asnbadfjanbaljdgnbasjgljljnbassdfa 8      * @param args 9      * @return 10      */11     12     public static void main(String[] args) {13         /*14          * 分析:15          * 次數:計數器16          * 找nba,得有包含contains,先判斷是否有nba,如果有則繼續,如果沒有則為017          * 首先找到nba出現位置,找到后計數1次;然后取剩余的子串,在找nba出現的位置,在計數一次;再取剩余子串,依次類推18          * 得用到循環19          */20         String str = "asnbadfjaljdgnbasjgljljnbassdfa";21         String key = "nba";22         int count = getStringKeyCount(str,key);23         System.out.println("key-count:" + count );24     }25     26      public static int getStringKeyCount(String str, String key) {27         int count = 0;28         if(!str.contains(key)){29             System.out.println("nba出現次數:"+count);30         }else{31             while(str.contains(key)){32                 //首先索引到第一次nba出現位置33                 int first = str.indexOf(key);//234                 count++;35                 //找到下一次nba出現的位置36                 str = str.substring(first+key.length());37                 System.out.println(str);38             }39 //            System.out.println("key出現次數:"+count);40         }41         return count;42     }43      44 }

 

實踐三

 1 package com.itsuper.p3.String; 2  3 public class Pratice3 { 4  5     /** 6      * 判斷兩個字符串中的最大相同子串。 abcefgkvcdejflsndlssdf、mendkgkvcdejfieksel 7      *  8      * @param args 9      */10 11     /*12      * 分析: 先拿短的字符串去看大串中是否包含,如果含有,則最大相同子串就是短的字符串13      * 如果不含有,就將子串一次遞減的方式,去放到長傳中去看是否包含,知道找到最大子串14      * 15      * 需要用到for循環16      */17     public static void main(String[] args) {18         String str1 = "abcefgkvcdejflsndlssdfdfa";19         String str2 = "mendkgkvcdejfieksel";20         String maxSubstr = FoundMaxSubstring(str1, str2);21         System.out.println("最大相同子串:" + maxSubstr);22 23     }24 25     public static String FoundMaxSubstring(String str1, String str2) { 26         //如何知道str1、str2哪一個是大的串,哪一個是小的串呢?需要判斷27         String max = null;28         String min = null;29         max = (str1.length()>str2.length())?str1:str2;30         min = (max.equals(str1))?str2:str1;31         System.out.println("max="+max);32         System.out.println("min="+min);33         //兩層for循環很值得好好研究34         for (int x = 0; x < str2.length(); x++) {35             for (int y = 0, z = str2.length() - x; z != str2.length() + 1; y++, z++) {36                 String sub = str2.substring(y, z);37                 if (str1.contains(sub))38                     return sub;39             }40         }41         // 如果沒有,直接返回空42         return null;43     }44 45 }

 

 實踐四

 1 package com.itsuper.p3.String; 2  3 public class Practive4 { 4  5     /** 6      * 模擬trim功能一致的方法 7      * 實際是去除字符串兩端的空白 8      * @param args 9      */10     public static void main(String[] args) {11         String str = "    abc  dmef   mdk   ";12         str = myTrim(str);13         System.out.println("去除空格后的字符串:" + "--" + str + "---");14     }15     public static String myTrim(String str) {16         int startIndex = 0;17         int endIndex = str.length()-1;18         //判斷是否是字符,反過來就是判斷是否是空格,從頭開始判斷19         while(startIndex < endIndex && (str.charAt(startIndex)) == ' ' ){20             startIndex++;21         }22         while(startIndex < endIndex && (str.charAt(endIndex)) == ' '){23             endIndex--;24         }25         str = str.substring(startIndex, endIndex);26         return str;27     }28 29 }

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广东省| 五指山市| 贵阳市| 通辽市| 固镇县| 新龙县| 凉城县| 台南市| 萍乡市| 乃东县| 汉阴县| 阳城县| 灌阳县| 郑州市| 江都市| 杨浦区| 大城县| 博客| 鄂州市| 盖州市| 六枝特区| 东乡县| 五河县| 鹰潭市| 潢川县| 宣武区| 浑源县| 海盐县| 长治市| 石柱| 伊吾县| 南丰县| 新沂市| 广灵县| 岳池县| 镇平县| 陆良县| 天全县| 德令哈市| 通海县| 琼结县|