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。

  

时间: 2024-10-26 00:59:04

Google Guava学习笔记——基础工具类String处理类的使用的相关文章

Google Guava学习笔记——基础工具类Preconditions类的使用

Preconditions类是一组静态方法用来验证我们代码的状态.Preconditons类很重要,它能保证我们的代码按照我们期望的执行,如果不是我们期望的,我们会立即得到反馈是哪里出来问题,现在我们使用Preconditions来保证我们代码的行为,并且对调试也非常方便. 当然,你也可以自己写预处理的代码,就像下面一样: if (someObj == null) { throw new IllegalArgumentException(" someObj must not be null&qu

Google Guava学习笔记——简介

Google Guava是什么东西?首先要追溯到2007年的“Google Collections Library”项目,它提供对Java 集合操作的工具类.后来Guava被进化为Java程序员开发必备的工具.Guava可以对字符串,集合,并发,I/O,反射进行操作. 在软件开发过程中,我们自认为可以什么都能做,我们本能的去写自己的类库来处理一些日常的问题.当然,我们认为自己写的代码是坚不可摧的,并且是经过单元测试的.实际上,我们没有我们认为的那么聪明,换句话说,它不在于你有多聪明,而是在于编写

Guava学习笔记目录

Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你的JAVa代码更加优雅,更加简洁,让你工作更加轻松愉悦.下面是学习过程中的一些笔记和知识点的记录. 1.Guava学习笔记:Google Guava 类库简介 2

Guava学习笔记:Google Guava 类库简介

> Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你的JAVa代码更加优雅,更加简洁,让你工作更加轻松愉悦.下面我们就开启优雅Java编程学习之旅! 项目相关信息: 官方首页:http://code.googl

Guava学习笔记:guava中的Preconditions使用

Guava学习笔记:guava中的Preconditions使用 转载:http://outofmemory.cn/java/guava/base/Preconditions google guava的base包中提供的Preconditions类用来方便的做参数的校验,他主要提供如下方法: checkArgument 接受一个boolean类型的参数和一个可选的errorMsg参数,这个方法用来判断参数是否符合某种条件,符合什么条件google guava不关心,在不符合条件时会抛出Illeg

Guava学习笔记: guava集合之Multiset

Guava学习笔记: guava集合之Multiset Multiset是什么? Multiset看似是一个Set,但是实质上它不是一个Set,它没有继承Set接口,它继承的是Collection<E>接口,你可以向Multiset中添加重复的元素,Multiset会对添加的元素做一个计数. 它本质上是一个Set加一个元素计数器. Multiset使用示例: package cn.outofmemory.guava.collection; import com.google.common.ba

Guava学习笔记:guava中对字符串的操作

Guava学习笔记:guava中对字符串的操作 转载:http://outofmemory.cn/java/guava/base/Strings 在google guava中为字符串操作提供了很大的便利,有老牌的判断字符串是否为空字符串或者为null,用指定字符填充字符串,以及拆分合并字符串,字符串匹配的判断等等. 下面我们逐一了解这些操作: 1. 使用com.google.common.base.Strings类的isNullOrEmpty(input)方法判断字符串是否为空        

Guava学习笔记: guava中的对象封装操作

Guava学习笔记: guava中的对象封装操作 转载:http://outofmemory.cn/java/guava/base/Objects 我们在开发中经常会需要比较两个对象是否相等,这时候我们需要考虑比较的两个对象是否为null,然后再调用equals方法来比较是否相等,google guava库的com.google.common.base.Objects类提供了一个静态方法equals可以避免我们自己做是否为空的判断,示例如下:         Object a = null;  

Guava学习笔记:Multimaps

Guava学习笔记:Multimaps 有时候我们需要这样的数据类型Map<String,Collection<String>>,guava中的Multimap就是为了解决这类问题的. Multimap的实现 Multimap提供了丰富的实现,所以你可以用它来替代程序里的Map<K, Collection<V>>,具体的实现如下: 实现 Key实现 Value实现 ArrayListMultimap HashMap ArrayList HashMultima