• 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
    "+
                                          "of a String with linebreaks
    "+
                                          "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。

      

  • 相关阅读:
    新年新方向-斩获新职位
    专利之家:让灵感冒冒泡
    转帖:专利之家
    WPF:Localization 基础
    WPF教程.002
    有关XXX产品研发管理约定
    转帖:曲线路标北京前门上岗
    超出想象-超级终端显示器
    小e的每日一画 之 小男孩在太阳下敬礼 20080102
    小e的每日一画 之 飞毯旅行记 20071231
  • 原文地址:https://www.cnblogs.com/IcanFixIt/p/4511485.html
Copyright © 2020-2023  润新知