1. 程式人生 > 實用技巧 >2020/7/10 JAVA常用Api之String類和字串緩衝區、正則表示式

2020/7/10 JAVA常用Api之String類和字串緩衝區、正則表示式

一、String類

  1、String類的概述:

      查閱API中的String類的描述,發現String 類代表字串。Java 程式中的所有字串字面值(如 "abc" )都作為此類的例項實現。      

//演示字串
String str  = "oracle";
str = "甲骨文";

      繼續查閱API發現說字串是常量;它們的值在建立之後不能更改,這是什麼意思呢?

      其實就是說一旦這個字串確定了,那麼就會在記憶體區域中就生成了這個字串。字串本身不能改變,但str變數中記錄的地址值是可以改變的。

      字串的本質是一個字元的陣列。

String s3 = "abc";
String s4 
= new String("abc"); System.out.println(s3==s4);//false System.out.println(s3.equals(s4));//true, //因為String重寫了equals方法,建立了字串自己的判斷相同的依據(通過字串物件中的字元來判斷)

      s3和s4的建立方式有什麼不同呢?

          s3建立,在記憶體中只有一個物件。這個物件在字串常量池中

          s4建立,在記憶體中有兩個物件。一個new的物件在堆中,一個字串本身物件,在字串常量池中

  2、String類構造方法

      

String s1 = new
String(); //建立String物件,字串中沒有內容 byte[] bys = new byte[]{97,98,99,100}; String s2 = new String(bys); // 建立String物件,把陣列元素作為字串的內容 String s3 = new String(bys, 1, 3); //建立String物件,把一部分陣列元素作為字串的內容,引數offset為陣列元素的起始索引位置,引數length為要幾個元素 char[] chs = new char[]{’a’,’b’,’c’,’d’,’e’}; String s4
= new String(chs); //建立String物件,把陣列元素作為字串的內容 String s5 = new String(chs, 0, 3);//建立String物件,把一部分陣列元素作為字串的內容,引數offset為陣列元素的起始索引位置,引數count為要幾個元素 String s6 = new String(“abc”); //建立String物件,字串內容為abc

  3、String類的方法

      1)字串中有多少個字元?

        

String str = "abcde";
int len = str.length();
System.out.println("len="+len);

      2)獲取部分字串

      

String str = "abcde";
String s1 = str.substring(1); //返回一個新字串,內容為指定位置開始到字串末尾的所有字元
String s2 = str.substring(2, 4);//返回一個新字串,內容為指定位置開始到指定位置結束所有字元
System.out.println("str="+str);
System.out.println("s1="+s1);
System.out.println("s2="+s2);

      3)字串是否以指定字串開頭。結尾同理。

      

String str = "StringDemo.java";
boolean b1 = str.startsWith("Demo");//判斷是否以給定字串開頭
boolean b2 = str.startsWith("String");
boolean b3 = str.endsWith("java");//判斷是否以給定字串結尾

      4)字串中是否包含另一個字串

      

String str = "abcde";
int index = str.indexOf(“bcd”); //判斷是否包含指定字串,包含則返回第一次出現該字串的索引,不包含則返回-1
boolean b2 = str.contains("bcd");//判斷是否包含指定字串,包含返回true,不包含返回false

      5)將字串轉成一個字元陣列。或者位元組陣列。

      

String str = "abcde";
char[] chs = str.toCharArray();
byte[] bytes = str.getBytes();

      6)判斷兩個字串中的內容是否相同

      

      7)其他方法如下程式碼所示:

String str = "abcde";
String str2 = "abcde";
String str3 = "hello";
boolean b1 = str.equals(str2);
boolean b2 = str.equals(str3);
//判斷該字串的內容是否為空的字串
        String a="";
        System.out.println(a.isEmpty());
        //獲取給定的字元,在該字串中第一次出現的位置
        String b="java";
        System.out.println(b.indexOf("a"));
        //獲取該字串中指定位置上的字元
        System.out.println(b.charAt(3));
        //把該字串轉換成 小寫字串
        String c="JAVA";
        System.out.println(c.toLowerCase());
        //把該字串轉換成 大寫字串
        System.out.println(b.toUpperCase());
        //在該字串中,將給定的舊字元,用新字元替換
        System.out.println(b.replace('a', 'b'));
        //在該字串中, 將給定的舊字串,用新字串替換
        String d="你好阿達大阿達";
        System.out.println(d.replace("阿達", "哈哈"));
        //去除字串兩端空格,中間的不會去除,返回一個新字串
        String e="          我我     我我我               ";
        System.out.println(e.trim());

二、字串緩衝區

  1、StringBuffer類

      查閱StringBuffer的API,StringBuffer又稱為可變字元序列,它是一個類似於 String 的字串緩衝區,通過某些方法呼叫可以改變該序列的長度和內容。

      原來StringBuffer是個字串的緩衝區,即就是它是一個容器,容器中可以裝很多字串。並且能夠對其中的字串進行各種操作。

  2、StringBuffer的方法使用

      

    程式碼演示:

建立一個字串緩衝區物件。用於儲存資料。
StringBuffer sb = new StringBuffer();
sb.append("haha"); //新增字串
sb.insert(2, "it");//在指定位置插入
sb.delete(1, 4);//刪除
sb.replace(1, 4, "cast");//替換指定範圍內的內容
String str = sb.toString();
//從指定位置開始,到末尾結束,擷取該字串緩衝區,返回新字串
        StringBuffer sb=new StringBuffer("abcdefg");
        String ss=sb.substring(1,4);
        System.out.println(ss);
        //在原有字串緩衝區內容基礎上,刪除指定位置上的字元
        sb=sb.deleteCharAt(2);
        System.out.println(sb);

  3、物件的方法鏈式呼叫

    程式碼如下:

建立一個字串緩衝區物件。用於儲存資料。
StringBuffer sb = new StringBuffer();
新增資料。不斷的新增資料後,要對緩衝區的最後的資料進行操作,必須轉成字串才可以。
String str = sb.append(true).append("hehe").toString();

  4、StringBuilder類

     我們閱讀StringBuilder的API說明發現,它也是一個可變的字元序列。此類提供一個與 StringBuffer 相容的 API,但不保證同步。

     該類被設計用作 StringBuffer 的一個簡易替換,用在字串緩衝區被單個執行緒使用的時候(這種情況很普遍)。

     如果可能,建議優先採用該類,因為在大多數實現中,它比 StringBuffer 要快。

三、正則表示式

  1、概念:

      正則表示式(英語:Regular Expression,在程式碼中常簡寫為regex

      正則表示式是一個字串,使用單個字元串來描述、用來定義匹配規則,匹配一系列符合某個句法規則的字串。

      在開發中,正則表示式通常被用來檢索、替換那些符合某個規則的文字。Pattern

  2、正則表示式匹配規則

     正則表示式的語法規則:

            

字元:x

含義:代表的是字元x

例如:匹配規則為 "a",那麼需要匹配的字串內容就是 ”a”

字元:\\

含義:代表的是反斜線字元'\'

例如:匹配規則為"\\" 那麼需要匹配的字串內容就是 ”\”

字元:\t

含義:製表符

例如:匹配規則為"\t" ,那麼對應的效果就是產生一個製表符的空間

字元:\n

含義:換行符

例如:匹配規則為"\n",那麼對應的效果就是換行,游標在原有位置的下一行

字元:\r

含義:回車符

例如:匹配規則為"\r" ,那麼對應的效果就是回車後的效果,游標來到下一行行首

字元類:[abc]

含義:代表的是字元ab c

例如:匹配規則為"[abc]" ,那麼需要匹配的內容就是字元a,或者字元b,或字元c的一個

字元類:[^abc]

含義:代表的是除了 ab c以外的任何字元

例如:匹配規則為"[^abc]",那麼需要匹配的內容就是不是字元a,或者不是字元b,或不是字元c的任意一個字元

字元類:[a-zA-Z]

含義:代表的是a z A Z,兩頭的字母包括在內

例如:匹配規則為"[a-zA-Z]",那麼需要匹配的是一個大寫或者小寫字母

字元類:[0-9]

含義:代表的是 09數字,兩頭的數字包括在內

例如:匹配規則為"[0-9]",那麼需要匹配的是一個數字

字元類:[a-zA-Z_0-9]

含義:代表的字母或者數字或者下劃線(即單詞字元)

例如:匹配規則為" [a-zA-Z_0-9] ",那麼需要匹配的是一個字母或者是一個數字或一個下滑線

預定義字元類:.

含義:代表的是任何字元

例如:匹配規則為" . ",那麼需要匹配的是一個任意字元。如果,就想使用 . 的話,使用匹配規則"\\."來實現

預定義字元類:\d

含義:代表的是 09數字,兩頭的數字包括在內,相當於[0-9]

例如:匹配規則為"\d ",那麼需要匹配的是一個數字

預定義字元類:\w

含義:代表的字母或者數字或者下劃線(即單詞字元),相當於[a-zA-Z_0-9]

例如:匹配規則為"\w ",,那麼需要匹配的是一個字母或者是一個數字或一個下滑線

邊界匹配器:^

含義:代表的是行的開頭

例如:匹配規則為^[abc][0-9]$ ,那麼需要匹配的內容從[abc]這個位置開始, 相當於左雙引號

邊界匹配器:$

含義:代表的是行的結尾

例如:匹配規則為^[abc][0-9]$ ,那麼需要匹配的內容以[0-9]這個結束, 相當於右雙引號

邊界匹配器:\b

含義:代表的是單詞邊界

例如:匹配規則為"\b[abc]\b" ,那麼代表的是字母abc的左右兩邊需要的是非單詞字元([a-zA-Z_0-9])

數量詞:X?

含義:代表的是X出現一次或一次也沒有

例如:匹配規則為"a?",那麼需要匹配的內容是一個字元a,或者一個a都沒有

數量詞:X*

含義:代表的是X出現零次或多次

例如:匹配規則為"a*" ,那麼需要匹配的內容是多個字元a,或者一個a都沒有

數量詞:X+

含義:代表的是X出現一次或多次

例如:匹配規則為"a+",那麼需要匹配的內容是多個字元a,或者一個a

數量詞:X{n}

含義:代表的是X出現恰好 n

例如:匹配規則為"a{5}",那麼需要匹配的內容是5個字元a

數量詞:X{n,}

含義:代表的是X出現至少 n

例如:匹配規則為"a{5, }",那麼需要匹配的內容是最少有5個字元a

數量詞:X{n,m}

含義:代表的是X出現至少 n 次,但是不超過 m

例如:匹配規則為"a{5,8}",那麼需要匹配的內容是有5個字元a 8個字元a之間

  3、字串類中涉及正則表示式的常用方法