Guava Spiltter —— 拆分器
Splitter 提供了各种方法来处理分割操作字符串,对象等。
一、类声明
以下是 com.google.common.base.Splitter 类的声明:
@GwtCompatible(emulated=true) public final class Splitter extends Object
二、类方法
| 修饰符和类型 | 方法说明 |
|---|---|
static Splitter | fixedLength(int length) 初始化拆分器,拆分器会将字符串分割为元素长度固定的List,最后一个元素长度不足可以直接返回. |
Splitter | limit(int limit) 限制拆分出的字符串数量 |
Splitter | omitEmptyStrings() 从结果中自动忽略空字符串. |
static Splitter | on(char separator) 初始化拆分器,参数为分隔符. |
static Splitter | on(CharMatcher separatorMatcher) 初始化拆分器,参数为分隔符. |
static Splitter | on(Pattern separatorPattern) 初始化拆分器,参数为分隔符. |
static Splitter | on(String separator) 初始化拆分器,参数为分隔符. |
static Splitter | onPattern(String separatorPattern) 返回一个拆分器,它将与给定模式(正则表达式)匹配的任何子序列视为分隔符. |
Iterable<String> | split(CharSequence sequence) 对Stirng通过拆分器进行拆分,返回一个Iterable |
List<String> | splitToList(CharSequence sequence) 将序列拆分为字符串组件并将其作为不可变列表返回. |
Splitter | trimResults() 修饰拆分器,拆分器做拆分操作时,会对拆分的元素做trim操作(删除元素头和尾的空格),相当于 trimResults(CharMatcher.whitespace()). |
Splitter | trimResults(CharMatcher trimmer) 修饰拆分器,拆分器做拆分操作时,会删除元素头尾charMatcher匹配到的字符. |
Splitter.MapSplitter | withKeyValueSeparator(char separator) 初始化一个Map拆分器,拆分器对String拆分时,separator为key和value之间的分隔符. |
Splitter.MapSplitter | withKeyValueSeparator(Splitter keyValueSplitter) 初始化一个Map拆分器,拆分器对String拆分时,separator为key和value之间的分隔符. |
Splitter.MapSplitter | withKeyValueSeparator(String separator) 初始化一个Map拆分器,拆分器对String拆分时,separator为key和value之间的分隔符. |
三、Splitter 介绍
JDK内建的字符串拆分工具有一些古怪的特性。比如 String.split 悄悄丢弃了尾部的分隔符。
问题:",a,,b,".split(","); 在以下返回结果中那个正确?
"", "a", "", "b", ""null, "a", null, "b", null"a", null, "b""a", "b"
以上都不对
正确答案是:"", "a", "", "b"。只有尾部的空字符串被忽略了。
而 Splitter 使用令人放心的、直白的流畅API模式对这些混乱的特性作了完全的掌控。
Splitter.on(',')
.trimResults()
.omitEmptyStrings()
.split("foo,bar,, qux");上述代码返回 Iterable<String>,其中包含 ”foo”、”bar” 和 ”qux”。Splitter可以被设置为按照任何模式、字符、字符串或字符匹配器拆分。
拆分器工厂
| 方法 | 描述 | 范例 |
|---|---|---|
Splitter.on(char) | 按单个字符拆分 | Splitter.on(‘;’) |
Splitter.on(CharMatcher) | 按字符匹配器拆分 | Splitter.on(CharMatcher.BREAKING_WHITESPACE) |
Splitter.on(String) | 按字符串拆分 | Splitter.on(“, “) |
Splitter.on(Pattern)Splitter.onPattern(String) | 按正则表达式拆分 | Splitter.onPattern(“\r?\n”) |
Splitter.fixedLength(int) | 按固定长度拆分;最后一段可能比给定长度短,但不会为空。 | Splitter.fixedLength(3) |
如果你想要拆分器返回List,只要使用 Lists.newArrayList(splitter.split(string)) 或类似方法。
注意: splitter 实例总是不可变的。用来定义 splitter 目标语义的配置方法总会返回一个新的splitter实例。这使得 splitter 实例都是线程安全的,你可以将其定义为 static final 常量。
四、测试类
package com.example.guava.string_utilities;
import com.google.common.base.CharMatcher;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
import junit.framework.TestCase;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
/**
* Splitter 测试
*/
public class SplitterTest extends TestCase {
public void test1() {
List<String> list = Splitter.on("!").splitToList("hello!world");
System.out.println(list); // [hello, world]
}
/**
* 过滤空
*/
public void test2() {
List<String> list = Splitter.on("!").omitEmptyStrings().splitToList("hello ! world!!!!!!");
System.out.println(list.size()); // 2
System.out.println(list); // [hello , world]
}
/**
* 去空格,过滤空
*/
public void test3() {
List<String> list = Splitter.on("!").trimResults().omitEmptyStrings().splitToList("hello ! world! !!!!!");
System.out.println(list.size()); // 2
System.out.println(list); // [hello , world]
}
/**
* 分割限制
*/
public void test4() {
List<String> list = Splitter.on("#").limit(3).splitToList("hello#world#java#google#scala");
System.out.println(list.size()); // 3
System.out.println(list); // [hello, world, java#google#scala]
}
/**
* 按长度分割
*/
public void test5() {
List<String> list = Splitter.fixedLength(3).splitToList("aaabbbccccddd");
System.out.println(list.size()); // 5
System.out.println(list); // [aaa, bbb, ccc, cdd, d]
}
/**
* 正则匹配
*/
public void test6() {
/*通过正则表达式初始化拆分器*/
String str = "apple.banana,,orange,,.";
List<String> result = Splitter.onPattern("[.|,]").omitEmptyStrings().trimResults().splitToList(str);
System.out.println(result); // [apple, banana, orange]
}
/**
* 正则表达式 + 键值对
*/
public void test7() {
Map<String, String> map = Splitter.on(Pattern.compile("\\|"))
.trimResults()
.omitEmptyStrings()
.withKeyValueSeparator("=")
.split("hello=HELLO| world=WORLD|||");
System.out.println(map.size()); // 2
System.out.println(map); // {hello=HELLO, world=WORLD}
}
/**
* CharMatcher.anyOf
*/
public void test8() {
/*通过Char初始化拆分器,将String分隔为Iterable*/
String str = "this, is , , random , text,";
List<String> result = Lists.newArrayList(Splitter.on(',').omitEmptyStrings().trimResults().split(str));
System.out.println(result); // [this, is, random, text]
String str1 = "~?~this, is~~ , , random , text,";
result = Splitter.on(',').omitEmptyStrings().trimResults(CharMatcher.anyOf("~? ")).splitToList(str1);
System.out.println(result); // [this, is, random, text]
}
}五、相关文章
未经允许请勿转载:程序喵 » Google Guava 快速入门 —— 【字符串处理】Spiltter 拆分器
程序喵