Google Guava学习(10)-Guava字符串工具Spiltter

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]


附录:

参考:http://www.yiibai.com/guava/guava_spliter.html


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Guava类库中的Table是一个双键的Map,可以理解为一个行列式的数据结构。 Table可以用来表示一个映射,其中每个键都有一个与之关联的值,而且这个键需要由两个参数来确定。在Table中,第一个键称为"行键",第二个键称为"列键",而对应的值称为"值"。 Table的实现方式可以看作是一个Map<RowKey, Map<ColumnKey, Value>>的嵌套结构,其中RowKey和ColumnKey分别表示行键和列键,Value表示对应的值。 Table提供了多种视图,包括行视图、列视图、单元格视图等,这些视图可以方便地进行表格的操作和查询。 下面是一个简单的示例代码: ```java Table<String, String, Integer> table = HashBasedTable.create(); table.put("row1", "col1", 1); table.put("row1", "col2", 2); table.put("row2", "col1", 3); table.put("row2", "col2", 4); System.out.println(table.get("row1", "col1")); // 输出1 System.out.println(table.row("row1")); // 输出{col1=1, col2=2} System.out.println(table.column("col1")); // 输出{row1=1, row2=3} System.out.println(table.cellSet()); // 输出[(row1,col1)=1, (row1,col2)=2, (row2,col1)=3, (row2,col2)=4] ``` 在上面的示例中,我们创建了一个Table对象,并往其中添加了四个元素。然后,我们分别通过get方法、row方法、column方法和cellSet方法获取了对应的视图,并输出了它们的内容。 需要注意的是,Table中的行键、列键和值都可以为null,但是在使用时需要特别注意空指针异常的问题。此外,Table中的行键和列键必须实现equals和hashCode方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值