Guava base -- Splitter

来源:互联网 发布:软件著作权侵权 编辑:程序博客网 时间:2024/05/21 10:18

Guava全文介绍地址:Google Guava

这次主要介绍是的是com.google.common.base.Splitter。我想做为一个程序员我们每天和String打交道的时候是会占很多时间的吧。字符串以一些分隔符标记分隔开也是我们工作中经常要遇到的问题。但是用Guava--Splitter,它会提取重叠子字符串的输入字符串,通常是通过识别表象的分隔符序列。这个分隔符可以指定单个字符,固定字符串,正则表达式或CharMatcher实例。或者,而不是使用一个分离器,分配器可以提取相邻给定固定长度的子字符串。

它的所有方法如下:

static SplitterfixedLength(int length)返回一个splitter对象把目标字符串按字符长度分隔Splitter limit(int limit)返回一个splitter对象,但它停止分隔当它到达limit的时候。Returns a splitter that behaves equivalently to this splitter but stops splitting after it reaches the limit.Splitter omitEmptyStrings()返回一个splitter对象,但是返回结果会删除空字符static Splitteron(char separator)返回一个splitter对象,通过给定的单个字符进行分隔static Splitteron(CharMatcher separatorMatcher)返回一个splitter对象,通过给定的CharMatcher进行分隔static Splitteron(Pattern separatorPattern)返回一个splitter对象,通过给定的Pattern进行分隔static Splitteron(String separator)返回一个splitter对象,通过给定的字符串进行分隔static SplitteronPattern(String separatorPattern)返回一个splitter对象,认为任何子序列匹配一个给定的模式(正则表达式)是一个分隔符。Iterable<String> split(CharSequence sequence)将序列分为字符串组件和使他们可以通过迭代器List<String> splitToList(CharSequence sequence)将序列分为字符串组件作为一个不可变的listSplitter trimResults()返回一个splitter对象,但是为移除返回list对象中每个对象前后的空白,相当于trimResults(CharMatcher.WHITESPACE)Splitter trimResults(CharMatcher trimmer)返回一个splitter对象,但是为移除返回list对象中每个对象前后与给定的CharMatcher对应的字符Splitter.MapSplitter withKeyValueSeparator(char separator)返回一个MapSplitterce,通过指定单个的cahr分解成entries,然后再通过entry中的特定字符分隔成key-value形式Map。是Join.withKeyValueSeparator()的逆运算Splitter.MapSplitter withKeyValueSeparator(Splitter keyValueSplitter)返回一个MapSplitterce,通过指定Splitter分解成entries,然后再通过entry中的特定字符分隔成key-value形式的Map。是Join.withKeyValueSeparator()的逆运算Splitter.MapSplitter withKeyValueSeparator(String separator)返回一个MapSplitterce,通过指定String分解成entries,然后再通过entry中的特定字符分隔成key-value形式的Map。是Join.withKeyValueSeparator()的逆运算

然后大家就可以对照下面的例子来理解这个类的用法了。

public class SplitterTest {    @Test    public void testSplitter() {        String startSring = "Washington D.C=Redskins#New York City=Giants#Philadelphia=Eagles#Dallas=Cowboys";        Map<String,String> testMap = Maps.newLinkedHashMap();        testMap.put("Washington D.C","Redskins");        testMap.put("New York City","Giants");        testMap.put("Philadelphia","Eagles");        testMap.put("Dallas","Cowboys");        Splitter.MapSplitter mapSplitter = Splitter.on("#").withKeyValueSeparator("=");        Map<String,String> splitMap = mapSplitter.split(startSring);        assertThat(testMap,is(splitMap));    }    @Test    public void testSplitPattern(){        String pattern = "\\d+";        String text = "foo123bar45678baz";        String[] expected = new String[]{"foo","bar","baz"};        Iterable<String> values = Splitter.on(Pattern.compile(pattern)).split(text);        int index = 0;        for (String value : values) {            assertThat(value,is(expected[index++]));        }    }    @Test    public void testSplitStringPattern(){        String pattern = "\\d+";        String text = "foo123bar45678baz";        String[] expected = new String[]{"foo","bar","baz"};        Iterable<String> values = Splitter.onPattern(pattern).split(text);        int index = 0;        for (String value : values) {            assertThat(value,is(expected[index++]));        }    }    @Test     public void testSplit(){        String delimiter = "&";        String text = "foo&bar&baz";        String[] expected = new String[]{"foo","bar","baz"};        Iterable<String> values = Splitter.on(delimiter).split(text);        int index = 0;        for (String value : values) {            assertThat(value,is(expected[index++]));        }    }    @Test    public void testSplitTrimResults(){        String delimiter = "&";        String text = "foo   &  bar&   baz  ";        String[] expected = new String[]{"foo","bar","baz"};        Iterable<String> values = Splitter.on(delimiter).trimResults().split(text);        int index = 0;        for (String value : values) {            assertThat(value,is(expected[index++]));        }    }    @Test    public void testSplitTrimResultsII(){        String delimiter = "&";        String text = "1foo&bar2&2baz3";        String[] expected = new String[]{"foo","bar","baz"};        Iterable<String> values = Splitter.on(delimiter).trimResults(CharMatcher.JAVA_DIGIT).split(text);        int index = 0;        for (String value : values) {            assertThat(value,is(expected[index++]));        }    }    @Test    public void testSplitOnCharacter(){        char delimiter = '|';        String text = "foo|bar|baz";        String[] expected = new String[]{"foo","bar","baz"};        Iterable<String> values = Splitter.on(delimiter).split(text);        int index = 0;        for (String value : values) {            assertThat(value,is(expected[index++]));        }    }    @Test    public void testSplitOnCharacterKeepMissing(){        char delimiter = '|';        String text = "foo|bar|||baz";        String[] expected = new String[]{"foo","bar","","","baz"};        Iterable<String> values = Splitter.on(delimiter).split(text);        int index = 0;        for (String value : values) {            assertThat(value,is(expected[index++]));        }    }    @Test    public void testSplitOnCharacterOmitMissing(){        char delimiter = '|';        String text = "foo|bar|||baz";        String[] expected = new String[]{"foo","bar","baz"};        Iterable<String> values = Splitter.on(delimiter).omitEmptyStrings().split(text);        int index = 0;        for (String value : values) {            assertThat(value,is(expected[index++]));        }    }}
0 0
原创粉丝点击