来源:
java.lang.Object
com.google.common.base.Splitter
字符串分割器,顾名思义根据规则将输入的字符串进行分割输出。首先来个例子:
Splitter.on(',').split("foo,bar,qux"),结果为: "foo"
, "bar"
,"qux",结果是以迭代器的形式返回,当然,后续会说明,还会有其他的形式。
Splitter可以通过添加过滤器,从而得到自己想要的结果,例如:
默认情况下:
Splitter.on(',').split(" foo,,, bar ,"),返回的是[" foo", "", "", " bar ", ""]。
通过添加过滤器后:
private static final Splitter MY_SPLITTER = Splitter.on(',') .trimResults() .omitEmptyStrings();
MY_SPLITTER.split("foo,,, bar ,"),返回的结果:["foo", "bar"]
这里需要注意的是:Splitter实例是immutable,通过已经包含了配置方法返回的Splitter,重新配置是无效的。
例:Splitter splitter = Splitter.on('/'); splitter.trimResults();
return splitter.split("wrong / wrong / wrong");这种是无效的。Splitter也提供了丰富的分割器方法和过滤器方法:
static Splitter | fixedLength(int length)
Returns
a splitter that divides strings into pieces of the given length.
|
Splitter | limit(int limit)
Returns
a splitter that behaves equivalently to
this splitter but stops splitting after it reaches the limit.
|
Splitter | omitEmptyStrings()
Returns
a splitter that behaves equivalently to
this splitter, but automatically omits empty strings from the results.
|
static Splitter | on(char separator)
Returns
a splitter that uses the given single-character separator.
|
static Splitter | on(CharMatcher separatorMatcher)
Returns
a splitter that considers any single character matched by the given
CharMatcher to be a separator.
|
static Splitter | on(Pattern separatorPattern)
Returns
a splitter that considers any subsequence matching
pattern to be a separator.
|
static Splitter | on(String separator)
Returns
a splitter that uses the given fixed string as a separator.
|
static Splitter | onPattern(String separatorPattern)
Returns
a splitter that considers any subsequence matching a given pattern (regular expression) to be a separator.
|
Iterable<String> | split(CharSequence sequence)
Splits
sequence into
string components and makes them available through an
Iterator ,
which may be lazily evaluated.
|
List<String> | splitToList(CharSequence sequence)
Splits
sequence into
string components and returns them as an immutable list.
|
Splitter | trimResults()
Returns
a splitter that behaves equivalently to
this splitter, but automatically removes leading and trailing
whitespace from
each returned substring; equivalent to
trimResults(CharMatcher.WHITESPACE) .
|
Splitter | trimResults(CharMatcher trimmer)
Returns
a splitter that behaves equivalently to
this splitter, but removes all leading or trailing characters matching the given
CharMatcher from each returned substring.
|
Splitter.MapSplitter | withKeyValueSeparator(char separator)
Returns
a
MapSplitter which splits entries based on this splitter, and splits entries into keys and values using the specified separator.
|
Splitter.MapSplitter | withKeyValueSeparator(Splitter keyValueSplitter)
Returns
a
MapSplitter which splits entries based on this splitter, and splits entries into keys and values using the specified key-value splitter.
|
Splitter.MapSplitter | withKeyValueSeparator(String separator)
Returns
a
MapSplitter which splits entries based on this splitter, and splits entries into keys and values using the specified separator.
|
Method Detail
on
public static Splitter on(char separator)
Returns a splitter that uses the given single-character separator. For example,Splitter.on(',').split("foo,,bar")
returns an iterable containing["foo", "", "bar"]
.-
Parameters:
-
separator
- the character to recognize as a separator
Returns:
- a splitter, with default settings, that recognizes that separator
-
on
public static Splitter on(CharMatcher separatorMatcher)
Returns a splitter that considers any single character matched by the givenCharMatcher
to be a separator. For example,Splitter.on(CharMatcher.anyOf(";,")).split("foo,;bar,quux")
returns an iterable containing["foo", "", "bar", "quux"]
.-
Parameters:
-
separatorMatcher
- aCharMatcher
that determines whether a character is a separator
Returns:
- a splitter, with default settings, that uses this matcher
-
on
public static Splitter on(String separator)
Returns a splitter that uses the given fixed string as a separator. For example,Splitter.on(", ").split("foo, bar,baz")
returns an iterable containing["foo", "bar,baz"]
.-
Parameters:
-
separator
- the literal, nonempty string to recognize as a separator
Returns:
- a splitter, with default settings, that recognizes that separator
-
on
@GwtIncompatible(value="java.util.regex") public static Splitter on(Pattern separatorPattern)
Returns a splitter that considers any subsequence matchingpattern
to be a separator. For example,Splitter.on(Pattern.compile("\r?\n")).split(entireFile)
splits a string into lines whether it uses DOS-style or UNIX-style line terminators.-
Parameters:
-
separatorPattern
- the pattern that determines whether a subsequence is a separator. This pattern may not match the empty string.
Returns:
- a splitter, with default settings, that uses this pattern Throws:
-
IllegalArgumentException
- ifseparatorPattern
matches the empty string
-
onPattern
@GwtIncompatible(value="java.util.regex") public static Splitter onPattern(String separatorPattern)
Returns a splitter that considers any subsequence matching a given pattern (regular expression) to be a separator. For example,Splitter.onPattern("\r?\n").split(entireFile)
splits a string into lines whether it uses DOS-style or UNIX-style line terminators. This is equivalent toSplitter.on(Pattern.compile(pattern))
.-
Parameters:
-
separatorPattern
- the pattern that determines whether a subsequence is a separator. This pattern may not match the empty string.
Returns:
- a splitter, with default settings, that uses this pattern Throws:
-
PatternSyntaxException
- ifseparatorPattern
is a malformed expression -
IllegalArgumentException
- ifseparatorPattern
matches the empty string
-
fixedLength
public static Splitter fixedLength(int length)
Returns a splitter that divides strings into pieces of the given length. For example,Splitter.fixedLength(2).split("abcde")
returns an iterable containing["ab", "cd", "e"]
. The last piece can be smaller thanlength
but will never be empty.Exception: for consistency with separator-based splitters,
split("")
does not yield an empty iterable, but an iterable containing""
. This is the only case in whichIterables.size(split(input))
does not equalIntMath.divide(input.length(), length, CEILING)
. To avoid this behavior, useomitEmptyStrings
.-
Parameters:
-
length
- the desired length of pieces after splitting, a positive integer
Returns:
- a splitter, with default settings, that can split into fixed sized pieces Throws:
-
IllegalArgumentException
- iflength
is zero or negative
-
omitEmptyStrings
@CheckReturnValue public Splitter omitEmptyStrings()
Returns a splitter that behaves equivalently tothis
splitter, but automatically omits empty strings from the results. For example,Splitter.on(',').omitEmptyStrings().split(",a,,,b,c,,")
returns an iterable containing only["a", "b", "c"]
.If either
trimResults
option is also specified when creating a splitter, that splitter always trims results first before checking for emptiness. So, for example,Splitter.on(':').omitEmptyStrings().trimResults().split(": : : ")
returns an empty iterable.Note that it is ordinarily not possible for
split(CharSequence)
to return an empty iterable, but when using this option, it can (if the input sequence consists of nothing but separators).-
Returns:
- a splitter with the desired configuration
limit
@CheckReturnValue public Splitter limit(int limit)
Returns a splitter that behaves equivalently tothis
splitter but stops splitting after it reaches the limit. The limit defines the maximum number of items returned by the iterator.For example,
Splitter.on(',').limit(3).split("a,b,c,d")
returns an iterable containing["a", "b", "c,d"]
. When omitting empty strings, the omitted strings do no count. Hence,Splitter.on(',').limit(3).omitEmptyStrings().split("a,,,b,,,c,d")
returns an iterable containing["a", "b", "c,d"
. When trim is requested, all entries, including the last are trimmed. HenceSplitter.on(',').limit(3).trimResults().split(" a , b , c , d ")
results in @{code ["a", "b", "c , d"]}.-
Parameters:
-
limit
- the maximum number of items returns
Returns:
- a splitter with the desired configuration Since:
- 9.0
-
trimResults
@CheckReturnValue public Splitter trimResults()
Returns a splitter that behaves equivalently tothis
splitter, but automatically removes leading and trailing whitespace from each returned substring; equivalent totrimResults(CharMatcher.WHITESPACE)
. For example,Splitter.on(',').trimResults().split(" a, b ,c ")
returns an iterable containing["a", "b", "c"]
.-
Returns:
- a splitter with the desired configuration
trimResults
@CheckReturnValue public Splitter trimResults(CharMatcher trimmer)
Returns a splitter that behaves equivalently tothis
splitter, but removes all leading or trailing characters matching the givenCharMatcher
from each returned substring. For example,Splitter.on(',').trimResults(CharMatcher.is('_')).split("_a ,_b_ ,c__")
returns an iterable containing["a ", "b_ ", "c"]
.-
Parameters:
-
trimmer
- aCharMatcher
that determines whether a character should be removed from the beginning/end of a subsequence
Returns:
- a splitter with the desired configuration
-
split
public Iterable<String> split(CharSequence sequence)
Splitssequence
into string components and makes them available through anIterator
, which may be lazily evaluated. If you want an eagerly computedList
, usesplitToList(CharSequence)
.-
Parameters:
-
sequence
- the sequence of characters to split
Returns:
- an iteration over the segments split from the parameter.
-
splitToList
@Beta public List<String> splitToList(CharSequence sequence)
Splitssequence
into string components and returns them as an immutable list. If you want anIterable
which may be lazily evaluated, usesplit(CharSequence)
.-
Parameters:
-
sequence
- the sequence of characters to split
Returns:
- an immutable list of the segments split from the parameter Since:
- 15.0
-
withKeyValueSeparator
@CheckReturnValue @Beta public Splitter.MapSplitter withKeyValueSeparator(String separator)
Returns aMapSplitter
which splits entries based on this splitter, and splits entries into keys and values using the specified separator.-
Since:
- 10.0
withKeyValueSeparator
@CheckReturnValue @Beta public Splitter.MapSplitter withKeyValueSeparator(char separator)
Returns aMapSplitter
which splits entries based on this splitter, and splits entries into keys and values using the specified separator.-
Since:
- 14.0
withKeyValueSeparator
@CheckReturnValue @Beta public Splitter.MapSplitter withKeyValueSeparator(Splitter keyValueSplitter)
Returns aMapSplitter
which splits entries based on this splitter, and splits entries into keys and values using the specified key-value splitter.-
Since:
- 10.0