美文网首页Java
Guava字符串处理:分割,连接,填充

Guava字符串处理:分割,连接,填充

作者: 王勇1024 | 来源:发表于2020-11-11 11:34 被阅读0次

连接器[Joiner]

用分隔符把字符串序列连接起来也可能会遇上不必要的麻烦。如果字符串序列中含有 null,那连接操作会更难。Fluent 风格的 Joiner 让连接字符串更简单。

Joiner joiner = Joiner.on("; ").skipNulls();
return joiner.join("Harry", null, "Ron", "Hermione");

上述代码返回”Harry; Ron; Hermione”。另外,useForNull(String)方法可以给定某个字符串来替换 null,而不像 skipNulls()方法是直接忽略 null。 Joiner 也可以用来连接对象类型,在这种情况下,它会把对象的 toString()值连接起来。

Joiner.on(",").join(Arrays.asList(1, 5, 7)); // returns "1,5,7"

警告:joiner 实例总是不可变的。用来定义 joiner 目标语义的配置方法总会返回一个新的 joiner 实例。这使得 joiner 实例都是线程安全的,你可以将其定义为 static final常量。

拆分器[Splitter]

JDK 内建的字符串拆分工具有一些古怪的特性。比如,String.split 悄悄丢弃了尾部的分隔符。 问题:”,a,,b,”.split(“,”)返回?

  1. “”, “a”, “”, “b”, “”
  2. null, “a”, null, “b”, null
  3. “a”, null, “b”
  4. “a”, “b”
  5. 以上都不对
    正确答案是 5:””, “a”, “”, “b”。只有尾部的空字符串被忽略了。 Splitter 使用令人放心的、直白的流畅 API 模式对这些混乱的特性作了完全的掌控。
Splitter.on(',')
.trimResults()
.omitEmptyStrings()
.split("foo,bar,, qux");

上述代码返回 Iterable,其中包含”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)

拆分器修饰符

方法 描述
omitEmptyStrings() 从结果中自动忽略空字符串
trimResults() 移除结果字符串的前导空白和尾部空白
trimResults(CharMatcher) 给定匹配器,移除结果字符串的前导匹配字符和尾部匹配字符
limit(int) 限制拆分出的字符串数量

如果你想要拆分器返回 List,只要使用Lists.newArrayList(splitter.split(string))或类似方法。 警告:splitter实例总是不可变的。用来定义 splitter 目标语义的配置方法总会返回一个新的 splitter 实例。这使得 splitter 实例都是线程安全的,你可以将其定义为 static final 常量。

字符匹配器[CharMatcher]

String noControl = CharMatcher.JAVA_ISO_CONTROL.removeFrom(string); //移除control字符
String theDigits = CharMatcher.DIGIT.retainFrom(string); //只保留数字字符
String spaced = CharMatcher.WHITESPACE.trimAndCollapseFrom(string, ' ');
//去除两端的空格,并把中间的连续空格替换成单个空格
String noDigits = CharMatcher.JAVA_DIGIT.replaceFrom(string, "*"); //用*号替换所有数字
String lowerAndDigit = CharMatcher.JAVA_DIGIT.or(CharMatcher.JAVA_LOWER_CASE).retainFrom(string);
// 只保留数字和小写字母

注:CharMatcher 只处理 char 类型代表的字符;它不能理解 0x10000 到 0x10FFFF 的 Unicode 增补字符。这些逻辑字符以代理对[surrogate pairs]的形式编码进字符串,而 CharMatcher 只能将这种逻辑字符看待成两个独立的字符。

获取字符匹配器

CharMatcher 中的常量可以满足大多数字符匹配需求:

其他获取字符匹配器的常见方法包括:

方法 描述
anyOf(CharSequence) 枚举匹配字符。如 CharMatcher.anyOf(“aeiou”)匹配小写英语元音
is(char) 给定单一字符匹配。
inRange(char, char) 给定字符范围匹配,如 CharMatcher.inRange(‘a’, ‘z’)

此外,CharMatcher 还有 negate()、and(CharMatcher)和 or(CharMatcher)方法。

使用字符匹配器

CharMatcher 提供了多种多样的方法操作 CharSequence 中的特定字符。其中最常用的罗列如下:

方法 描述
collapseFrom(CharSequence, char) 把每组连续的匹配字符替换为特定字符。如 WHITESPACE.collapseFrom(string, ‘ ‘)把字符串中的连续空白字符替换为单个空格。
matchesAllOf(CharSequence) 测试是否字符序列中的所有字符都匹配。
removeFrom(CharSequence) 从字符序列中移除所有匹配字符。
retainFrom(CharSequence) 在字符序列中保留匹配字符,移除其他字符。
trimFrom(CharSequence) 移除字符序列的前导匹配字符和尾部匹配字符。
replaceFrom(CharSequence, CharSequence) 用特定字符序列替代匹配字符。

所有这些方法返回 String,除了 matchesAllOf 返回的是 boolean。

字符集[Charsets]

不要这样做字符集处理:

try {
    bytes = string.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
    // how can this possibly happen?
    throw new AssertionError(e);
}

试试这样写:

bytes = string.getBytes(Charsets.UTF_8);

Charsets 针对所有 Java 平台都要保证支持的六种字符集提供了常量引用。尝试使用这些常量,而不是通过名称获取字符集实例。

大小写格式[CaseFormat]

CaseFormat 被用来方便地在各种 ASCII 大小写规范间转换字符串——比如,编程语言的命名规范。CaseFormat 支持的格式如下:

格式 范例
LOWER_CAMEL lowerCamel
LOWER_HYPHEN lower-hyphen
LOWER_UNDERSCORE lower_underscore
UPPER_CAMEL UpperCamel
UPPER_UNDERSCORE UPPER_UNDERSCORE

CaseFormat的用法很直接:

CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "CONSTANT_NAME")); // returns "constantName"

我们 CaseFormat 在某些时候尤其有用,比如编写代码生成器的时候。

相关文章

  • Guava字符串处理:分割,连接,填充

    连接器[Joiner] 用分隔符把字符串序列连接起来也可能会遇上不必要的麻烦。如果字符串序列中含有 null,那连...

  • 字符串处理之Splitter和Joiner

    在google guava包中提供了用于字符串连接(Joiner)和字符串分割(Splitter)的类 Joine...

  • PHP字符串处理函数

    字符串长度函数 字符串替换函数 截取字符串函数 分割、连接、反转函数 空白处理函数 字符转义函数 字符串比较函数

  • Python 按长度分割字符串

    分割后返回字符串列表 分割后返回换行符连接的字符串

  • Google Guava 字符串处理

    为了方便我们对字符串的处理,Guava给我们提供了好多很方便的工具类,接下来我们对Guava里面字符串相关的...

  • Guava基础

    什么是Guava? ​ Guava是Google开源的一个涵盖了字符串处理、缓存、并发库、事件总线、IO等常用...

  • 18-R文本处理函数stringr

    字符串在平常的数据处理中经常用到,需要对其进行分割、连接、转换等操作,灵活的字符串处理,可以有效地提高代码的编写效...

  • Guava记录 - Strings类

    guava提供了Strings类处理字符串相关。 1、Strings.isNullOrEmpty(null) 校验...

  • Guava学习

    字符串处理 Joiner是连接器,Splitter是分割器,通常我们会把它们定义为static final,利用o...

  • 操作mysql字段

    1.varchar 类型填充0 2.字符串连接

网友评论

    本文标题:Guava字符串处理:分割,连接,填充

    本文链接:https://www.haomeiwen.com/subject/ildebktx.html