不管你喜欢何种编程语言,很多时候针对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。

  

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

  1. Google Guava学习笔记——基础工具类Joiner的使用

    Guava 中有一些基础的工具类,如下所列: 1,Joiner 类:根据给定的分隔符把字符串连接到一起.MapJoiner 执行相同的操作,但是针对 Map 的 key 和 value. 2,Spli ...

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

    Preconditions类是一组静态方法用来验证我们代码的状态.Preconditons类很重要,它能保证我们的代码按照我们期望的执行,如果不是我们期望的,我们会立即得到反馈是哪里出来问题,现在我们 ...

  3. Google Guava学习笔记——基础工具类针对Object类的使用

    Guava 提供了一系列针对Object操作的方法. 1. toString方法 为了方便调试重写toString()方法是很有必要的,但写起来比较无聊,不管如何,Objects类提供了toStrin ...

  4. Google Guava学习笔记——基础工具类Splitter的使用

    另一项经常对字符串的操作就是根据指定的分隔符对字符串进行分隔.我们基本上会使用String.split方法: String testString = "Monday,Tuesday,,Thu ...

  5. Google Guava学习笔记——简介

    Google Guava是什么东西?首先要追溯到2007年的“Google Collections Library”项目,它提供对Java 集合操作的工具类.后来Guava被进化为Java程序员开发必 ...

  6. Guava学习笔记:简化异常处理的Throwables类

    有时候, 当我们我们捕获异常, 并且像把这个异常传递到下一个try/catch块中.Guava提供了一个异常处理工具类, 可以简单地捕获和重新抛出多个异常.例如: import java.io.IOE ...

  7. Guava学习笔记目录

    Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libra ...

  8. guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用

    guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection ...

  9. jQuery学习笔记 - 基础知识扫盲入门篇

    jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...

随机推荐

  1. javascript 数组对象与嵌套循环写法

    'use strict' var info=[{"name":"最近想跳河","interst":["历史"," ...

  2. IOS中获取屏幕尺寸

    //app尺寸,去掉状态栏 CGRect appRect = [UIScreen mainScreen].applicationFrame; NSLog(@"%f, %f, %f,%f&qu ...

  3. c语言学习第四天数据类型1

    int   代表整数,它在内存中占4个字节,二进制的表示方式是占用了三十二位,二进制中只包含0和1,那它的最大值就是全为1,但int是 有符号类型,所以最高位(左边的第一位)要拿出来做符号位,这样就只 ...

  4. Mac 安装 Tomcat

    默认mac已经安装好java jdk-----/Library/Java/JavaVirtualMachines 1. http://tomcat.apache.org/download-70.cgi ...

  5. Android Socket通信

    1.TCP: xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns: ...

  6. .NET设计模式系列文章 from TerryLee

    http://www.cnblogs.com/Terrylee/archive/2006/07/17/334911.html 最初写探索设计模式系列的时候,我只是想把它作为自己学习设计模式的读书笔记来 ...

  7. django-url调度器-中级篇

    在初级篇中,我们接触了: 1.url 的简单编写 2.两种传参的方式 3.捕获的参数总是字符串 4.为视图设置默认参数 …… 在中级篇中将更进一步. 包含其它的URLconfs 当网站非常大的时候,将 ...

  8. 8.python中的数字

    python中数字对象的创建如下, a = 123 b = 1.23 c = 1+1j 可以直接输入数字,然后赋值给变量. 同样也可是使用类的方式: a = int(123) b = float(1. ...

  9. oracle分区表(整理)

    Oracle 表分区 早在8.0.5版本中,Oracle就将范围分区技术引入,现在分区功能已经越来越强大,包括支持扩展分区功能.Interval分区.外键分区.模拟列分区.以及分区建议器等.那么,分区 ...

  10. hdu 1873 看病要排队

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1873 看病要排队 Description 看病要排队这个是地球人都知道的常识.不过经过细心的0068的 ...