Java字符串進階

Java字符串進階

前言

最經常使用的對字符串操做的類有三個,分別是String,StringBuilder,StringBuffer,下面將會詳細的說說這三個類......java

String

String類表明字符串,這個是最基本的對字符串的類,這個也是使用比較多的類,這裏就再也不詳細介紹了正則表達式

構造

  • new String(String str)
  • new String(StringBuilder str)
  • new String(StringBuffer str)
  • new String(byte[] bys,String charsetName) 經過使用指定的字符集解碼指定的 byte 子數組,構造一個新的 String。

經常使用方法

  • str charAt(int index) 返回指定索引處的字符
  • String concat(String str) 將指定字符串str鏈接到此字符串的結尾,返回鏈接成功後的字符,所以須要接受纔能有效果
  • boolean contains(CharSequence s) 判斷此字符串是否包含指定的char值序列,這裏的 CharSequence是一個接口,能夠直接使用它的子類做爲參數(String,StringBuffer,StringBuild)
  • static String copyValueOf(char[] c) 將字符數組變成字符串而且返回
  • static String copyValueOf(char[] c,int off,int count) 將截取的字符數組變成字符串而且返回,off是開始截取的下標,count是截取的個數
  • boolean endWith(String s) 判斷字符串是不是以s結尾
  • boolean equals(Object o) 用於比較
  • int indexOf(char c) 返回字符c在字符串中第一次出現的索引
  • int indexOf(char c,int fromIndex) 從指定索引處開始搜索,查找第一次出現的索引
  • int indexOf(String str) 返回指定子字符串在此字符串中第一次出現處的索引。
  • int indexOf(String str,int fromIndex) 返回指定子字符串在此字符串中第一次出現處的索引,從指定的索引開始。
  • boolean isEmpty()
  • int length()
  • boolean matches(String regex) 是否匹配正則表達式
  • trim() 返回字符串的副本,忽略前導空白和尾部空白。
  • String substring(int beginIndex) 返回一個新的字符串,它是此字符串的一個子字符串。
  • String substring(int beginIndex, int endIndex) 返回一個新字符串,它是此字符串的一個子字符串。
  • String toUpperCase() 使用默認語言環境的規則將此 String 中的全部字符都轉換爲大寫。
  • String[] split(String regex) 根據給定正則表達式的匹配拆分此字符串。
  • String[] split(String regex, int limit) 根據匹配給定的正則表達式來拆分此字符串。
  • char[] toCharArray() 將此字符串轉換爲一個新的字符數組。
  • byte[] getBytes(Charset charset) 使用給定的 charset 將此 String 編碼到 byte 序列,並將結果存儲到新的 byte 數組

注意

  • 上面的new String(byte[] bys,String charsetName)這個構造方法很重要,它能夠改變字符串的編碼集(和byte[] getBytes(Charset charset))配合着使用,下面咱們來看一個例子,代碼以下:
/*
         * InputStreamReader實現了將字節流FileInputStream轉換爲字符流,而後使用轉換來的字節流建立高效流,從而實現高效的讀寫
         */

        /*
         * 編碼集(個人eclipse編輯器默認的是utf-8
         * 下面將中文字符串的編碼集變爲GBK寫入a.txt文件,由於a.txt默認的是utf-8的所以這裏在文件中顯示的是亂碼
         * 而後咱們讀出來的仍是GBK的,由於咱們寫入的是GBK編碼集的,可是個人eclipse是utf-8的編碼集,所以在控制檯上輸出的仍是亂碼
         * new String(byte[] bys,String
         * charsetName)使用這個構造方法將byte數組改變編碼集而且轉換爲utf-8格式的,那麼此次在控制檯上輸出的就不亂碼了
         */

        // 將GBK格式的中文寫入a.txt文件
        File file = new File("src/a.txt");
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        String str = "中";
        byte[] by = str.getBytes("GBK"); // 將字符串改成GBK編碼集
        fileOutputStream.write(by);
        fileOutputStream.close();
        
        //從a.txt文件中讀取中文
        FileInputStream fileInputStream = new FileInputStream(file);
        int len;
        byte[] bys = new byte[4];
        while ((len = fileInputStream.read(bys)) != -1) {
            System.out.println(new String(bys, "GBK"));
        }
        fileInputStream.close();

StringBuffer

線程安全的可變字符序列。一個相似於 String 的字符串緩衝區,但不能修改。固然最重要的一點就是線程安全,咱們能夠從它的源碼中能夠看出,對於一些操做(append,insert..)都是使用了線程控制塊來實現同步,適合與多線程下的使用,源代碼以下:數組

public synchronized StringBuffer append(Object obj) {
        super.append(String.valueOf(obj));
        return this;
    }

    public synchronized StringBuffer append(String str) {
        super.append(str);
        return this;
    }
    
    public synchronized StringBuffer delete(int start, int end) {
        super.delete(start, end);
        return this;
    }

    /**
     * @throws StringIndexOutOfBoundsException {@inheritDoc}
     * @since      1.2
     */
    public synchronized StringBuffer deleteCharAt(int index) {
        super.deleteCharAt(index);
        return this;
    }

構造

  • new StringBuffer(StringBuilder str)
  • new StringBuffer(String str)

經常使用的方法

  • StringBuffer append(str)將指定類型的str追加到此字符串的後面(String,char,char[],int,double,float,long,StringBuffer,StringBuilder)
  • StringBuffer insert(int offest, str) 將指定類型的str插入到此序列中,offest表示開始插入的位置的索引,類型有 String,char,char[],int,double,float,long,StringBuffer,StringBuilder
  • String delete(int fromIndex,int endIndex) 移除此序列中的字符串而且返回新的緩衝字符串
  • StringBuffer reverse() 反轉字符串
  • String substring(int start) 返回一個新的 String,它包含此字符序列當前所包含的字符子序列。
  • String substring(int start, int end) 返回一個新的 String,它包含此序列當前所包含的字符子序列。
  • StringBuffer deleteCharAt(int index) 移除此序列指定位置的 char。
  • int length() 長度
  • String toString() 返回此序列中數據的字符串表示形式。

StringBuilder

建議優先採用該類,由於在大多數實現中,它比 StringBuffer 要快。可是這個類不是線程安全的,只適合單線程,若是使用多線程推薦使用StringBuffer,固然使用這個也行,不過須要本身實現同步安全

構造方法

  • new StringBuilder(String str)

經常使用方法

這個類的經常使用方法和StringBuffer的同樣,這裏就再也不一一列舉了,參照上面的便可使用多線程

相關文章
相關標籤/搜索