您的位置:首页 > 其它

Guava base -- Splitter

2016-06-04 14:53 274 查看
Guava全文介绍地址:Google Guava

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

它的所有方法如下:

static Splitter	fixedLength(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 Splitter	on(char separator)
返回一个splitter对象,通过给定的单个字符进行分隔

static Splitter	on(CharMatcher separatorMatcher)
返回一个splitter对象,通过给定的CharMatcher进行分隔

static Splitter	on(Pattern separatorPattern)
返回一个splitter对象,通过给定的Pattern进行分隔

static Splitter	on(String separator)
返回一个splitter对象,通过给定的字符串进行分隔

static Splitter	onPattern(String separatorPattern)
返回一个splitter对象,认为任何子序列匹配一个给定的模式(正则表达式)是一个分隔符。

Iterable<String> split(CharSequence sequence)
将序列分为字符串组件和使他们可以通过迭代器

List<String> splitToList(CharSequence sequence)
将序列分为字符串组件作为一个不可变的list

Splitter 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 JoinerTest {

@Test
public void testMapJoiner() {
//Using LinkedHashMap so that the original order is preserved
String expectedString = "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");
String returnedString = Joiner.on("#").withKeyValueSeparator("=").join(testMap);
assertThat(returnedString,is(expectedString));
}

@Test
public void testJoinStrings(){
String[] values = new String[]{"foo", "bar","baz"};
String returned = Joiner.on("|").join(values);
assertThat(returned,is("foo|bar|baz"));
}

@Test
public void testJoinStringBuilder(){
String[] values = new String[]{"foo", "bar","baz"};
StringBuilder builder = new StringBuilder();
StringBuilder returned = Joiner.on("|").appendTo(builder,values);
assertThat(returned,is(builder));
assertThat(returned.toString(),is("foo|bar|baz"));
}

@Test
public void testJoinFileWriter() throws Exception{
File tempFile = new File("testTempFile.txt");
tempFile.deleteOnExit();
CharSink charSink = Files.asCharSink(tempFile, Charsets.UTF_8);
Writer writer = charSink.openStream();
String[] values = new String[]{"foo", "bar","baz"};
Joiner.on("|").appendTo(writer,values);
writer.flush();
writer.close();
String fromFileString = Files.toString(tempFile,Charsets.UTF_8);
assertThat(fromFileString,is("foo|bar|baz"));

}

@Test
public void testJoinStringsSkipNull(){
String[] values = new String[]{"foo",null,"bar"};
String returned = Joiner.on("#").skipNulls().join(values);
assertThat(returned,is("foo#bar"));
}

@Test
public void testJoinStringsUseForNull(){
String[] values = new String[]{"foo",null,"bar"};
String returned = Joiner.on("#").useForNull("missing").join(values);
assertThat(returned,is("foo#missing#bar"));
}

@Test (expected = NullPointerException.class)
public void testJoinStringsNoNullHandler(){
String[] values = new String[]{"foo",null,"bar"};
Joiner.on("#").join(values);
fail("Should not get here");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: