1. 功能:处理字符串拆分
2.代码:
package com.example.google.guava.demo.string;
import com.google.common.base.Splitter;
import java.util.List;
import java.util.Map;
import static com.google.common.collect.Lists.newArrayList;
/**
* <p>
* <code>SpiltterTest</code>
* </p>
* Description: Splitter -> 字符串分离器
* Splitter可以支持单个字符、字符串、正则表达式或者CharMatcher实例来分割给定的字符串
* 注意:
* 1.Splitter对象是immutable的,所以你必须用一个新的Splitter对象去接收
* 2.用正则表达式来分割字符串的效率很低
* 3.@GwtCompatible意思是Google Web Toolkit(GWT)兼容
*
* @author Mcchu
* @date 2017/10/23 10:43
*/
public class SpiltterTest {
public static void main(String[] args) {
// 1.根据某个字符分割字符串并做trim操作和过滤""的操作
String str1 = "the ,quick, , brown , fox, jumps, over, the, lazy, little dog.";
Iterable<String> result1 = Splitter.on(',') // 根据逗号分割字符串
.trimResults() //对每个分割后的元素做trim操作
.omitEmptyStrings() // 过滤掉空的元素
.split( str1 );
System.out.println("1.简单使用Splitter:"+result1); //也可以使用for循环输出
// 2.根据指定长度分割字符串
String str2 = "hello world!";
Iterable<String> result2 = Splitter.fixedLength(2).split(str2);
System.out.println("2.方法fixedLength的使用:"+result2);
// 3.当分割的子字符串达到了limit设置的个数时,则停止分割
String str31 = "a,b,c,d,e";
Iterable<String> result31 = Splitter.on(",").limit(3).split(str31);
System.out.println("3.方法limit的使用:"+result31);
System.out.println(" # 如果上面看到的不直观,可以通过遍历来看,分割成了3个子字符串:");
for ( String str:result31 ){
System.out.println(" "+str);
}
String str32 = "a,b,,c,,,d,e";
Iterable<String> result321 = Splitter.on(",").limit(3).omitEmptyStrings().split(str32);
Iterable<String> result322 = Splitter.on(",").limit(3).split(str32);
System.out.println(" # 此处分割带有空的字符串,使用omitEmptyStrings:");
for ( String str: result321 ){
System.out.println(" "+str);
}
System.out.println(" # 此处分割带有空的字符串,且不使用omitEmptyStrings:");
for ( String str: result322 ){
System.out.println(" "+str);
}
// 4.字符串转List
List<String> strList = newArrayList(Splitter.on(",").split("a,_b,c__"));
strList.add("d_"); // 测试是否可以添加元素
System.out.println("4.字符串分割转List:"+strList);
// 5.字符串转Map
Map<String,String> strMap = Splitter.on(";").trimResults().withKeyValueSeparator("=").split("a=2;b=3");
System.out.println("5.字符串分割转Map:"+strMap);
// 6.正则分割
String str6 = "$1$ab$5$cd7$$2h";
Iterable<String> result6 = Splitter.onPattern("[0-9]").split(str6);
System.out.println("6.使用正则表达式分割字符串:"+result6);
// 7.拆分字符串转不可变列表
String str7 = "a,b,c";
List<String> newStrList = Splitter.on(",").splitToList(str7);
//newStrList.add("d"); // 测试是否可以添加元素,此处抛java.lang.UnsupportedOperationException
System.out.println("7.分割并转定长的List集合:"+newStrList);
}
}
3. 输出结果:
1.简单使用Splitter:[the, quick, brown, fox, jumps, over, the, lazy, little dog.]
2.方法fixedLength的使用:[he, ll, o , wo, rl, d!]
3.方法limit的使用:[a, b, c,d,e]
# 如果上面看到的不直观,可以通过遍历来看,分割成了3个子字符串:
a
b
c,d,e
# 此处分割带有空的字符串,使用omitEmptyStrings:
a
b
c,,,d,e
# 此处分割带有空的字符串,且不使用omitEmptyStrings:
a
b
,c,,,d,e
4.字符串分割转List:[a, _b, c__, d_]
5.字符串分割转Map:{a=2, b=3}
6.使用正则表达式分割字符串:[$, $ab$, $cd, $$, h]
7.分割并转定长的List集合:[a, b, c]