Google Guava學習筆記——基礎工具類String處理類的使用


  不管你喜歡何種編程語言,很多時候針對string編程的處理都是乏味而且愛出錯誤的,很多時候,我們需要從文件或是數據庫中讀取數據,或者根據需求重新格式化或排序字符串給用戶顯示。幸運的是,Guava提供了一些非常有用的類,來很容易的處理String的問題,這些類有:

  • CharMatcher
  • Charsets
  • Strings

  使用Charsets類

  在Java平台,Java支持6種標准字符集,它經常出現在下面的代碼中:

    byte[] bytes = someString.getBytes();

  但上面的代碼有些問題,在沒有指定字符集的情況下,它的返回值使用的是系統默認字符集,但當系統不一樣時會導致問題,比較好的辦法就是明確給方法指定字符集:

        try{
            bytes = "foobarbaz".getBytes("UTF-8");
        }catch (UnsupportedEncodingException e){
           //This really can't happen UTF-8 must be supported
        } 

  但是上面的代碼仍然有兩個問題:

    一是Java必須支持UTF-8,否則拋出相關的異常;

    二是我們很容易把字符集拼寫錯誤。

  這時我們可以使用Charsets類,它提供了靜態不可變的字符串來支持Java的字符集,我們可以把代碼改成下面的樣式:

    byte[] bytes2 = "foobarbaz".getBytes(Charsets.UTF_8);

  但是在Java7以后,提供了StandardCharsets類來實現同樣的功能。

  使用Strings 類

  Strings類 提供了很多實用的方法來處理字符串,你是不是也學過類似下面的代碼?

StringBuilder builder = new StringBuilder("foo");
    char c = 'x';
    for (int i = 0; i < 3; i++) {
        builder.append(c);
    }
    return builder.toString();

  上面的代碼可以用下面一句話代替:

    Strings.padEnd("foo", 6, 'x');

  需要注意的是方法的第二個參數“6”,表示返回的字符串的長度,而不是’x'字符重復的次數,如果字符串原本超過了6個,則什么都不做。

  還有一個padStart方法,表示在給定的字符串開始位置添加指定的字符。

  在Strings類中還有三個處理null的方法:

    nullToEmpty:傳遞一個字符串作為參數,如果字符串不為null或長度大於0,返回原始的字符串;否則返回“”。

    emptyToNull: 如果字符串為null獲知為空,返回null。

    isNUllOrEmpty: 如果字符串為null或為空,返回true。

  在處理字符串類型參數的時候,用nullToEmptys是一個不錯的主意!

  使用CharMatcher類

   CharMather類 提供了基於一種類型字符是否存在或是一個范圍內的字符的功能。它針對文本的處理和格式化非常簡單,例如,下面的例子把多行的字符串轉化成一行用空格分隔的字符串:

 @Test
    public void testRemoveLinebreaks(){
        String stringWithLinebreaks = "This is an example\n"+
                                      "of a String with linebreaks\n"+
                                      "we want on one line";
        String expected = "This is an example of a String with linebreaks we want on one line";
        String scrubbed = CharMatcher.BREAKING_WHITESPACE.replaceFrom(stringWithLinebreaks,' ');
        assertThat(scrubbed,is(expected));
    }

  有的需求需要在一個字符串中得到是數字的部分,可以使用retainFrom方法:

 @Test
    public void testRetainFrom(){
        String lettersAndNumbers = "foo989yxbar234";
        String expected = "989234";
        String retained = CharMatcher.JAVA_DIGIT.retainFrom(lettersAndNumbers);
        assertThat(expected,is(retained));
    }

  甚至,可以返回指定范圍的字符串:

 @Test
    public void testCombineMatchers(){
        CharMatcher cm = CharMatcher.inRange('A','G');
        assertThat(cm.retainFrom("aaaABbbccCdddDEeeeHI"),is("ABCDE"));
    }

  用起來非常方便,更多方法請查找API。

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM