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 拆分器