Guava——Splitter与Java原生split(附Scala示例)

31 篇文章 1 订阅

1. 多种拆分方式

1.1 按分隔符拆分

String line1 = "C|Java|C++|Go|Python|Scala";

// java原生
String[] split1 = line1.split("\\|");
System.out.println("split1 = " + Arrays.toString(split1));

// guava
Iterable<String> iter = Splitter.on("|").split(line1);
System.out.println("iter = " + iter);

1.2 按长度拆分

String line4 = "qqqaaazzzwwwss";
Iterable<String> iter5 = Splitter.fixedLength(3).split(line4);
System.out.println("iter5 = " + iter5);

1.3 按正则拆分

 String line5 = "qqq2aaazz4zwwawss";
 
// java原生
String[] split4 = line5.split("[0-9]");
System.out.println("split4 = " + Arrays.toString(split4));

// guava
Iterable<String> iter6 = Splitter.onPattern("[0-9]").split(line5);
// Iterable<String> iter6 = Splitter.on(Pattern.compile("[0-9]")).split(line5);
System.out.println("iter6 = " + iter6);

1.4 只拆分前几个元素

String line6 = "C|Java|C++|Go|Python|Scala";

// java原生
String[] split3 = line6.split("\\|", 3);
System.out.println("split3 = " + Arrays.toString(split3));

// guava
Iterable<String> iter7 = Splitter.on("|").limit(3).split(line6);
System.out.println("iter7 = " + iter7);

2. 拆分后续处理

2.1 删除空字符串元素

String line2 = "C|Java|C++|Go|Python|Scala||";
// java原生,不会保留最后两个分隔符的结果(空字符串)
String[] split2 = line2.split("\\|");
System.out.println("split2 = " + Arrays.toString(split2));

// guava默认保留最后两个分隔符的结果
Iterable<String> iter2 = Splitter.on("|").split(line2);
System.out.println("iter2 = " + iter2);

// guava删除空字符串元素
Iterable<String> iter3 = Splitter.on("|").omitEmptyStrings().split(line2);
System.out.println("iter3 = " + iter3);

2.2 对结果元素进行trim(默认去掉空格)

String line3 = "C| Java |C++|Go |Python|Scala";

Iterable<String> iter4 = Splitter.on("|").trimResults().split(line3);
// 指定需要trim的符号。
// 同时,CharMatcher 还可以使用and和or等来构造
// Splitter.on("|").trimResults(CharMatcher.is('&')).split(line8);
System.out.println("iter4 = " + iter4);

2.3 对拆分结果再次拆分,生成Map

String line7 = "k1->v1|k2->v2|k3->v3";
Map<String, String> map = Splitter.on("|").withKeyValueSeparator("->").split(line7);
System.out.println("map = " + map);

附:Scala示例

/**
  * Split测试
  *
  * @author ALion
  * @version 2019/2/3 1:12
  */
object ScalaSplitDemo {

  def main(args: Array[String]): Unit = {
    val line1 = "C|aJava| C++ |Go| Python|Scala"

    // 按分隔符拆分
    val arr1: Array[String] = line1.split("\\|")
    println(s"arr1 = ${arr1.toBuffer}")

    // 对结果元素进行trim,去掉空格
    val arr2: Array[String] = line1.split("\\|").map(_.trim)
    println(s"arr1 = ${arr2.toBuffer}")

    // 在指定的角标处将字符串一分为二,生成元组
    val tuple = line1.splitAt(3)
    println(s"tuple = $tuple")

    // 指定多个分隔符
    val line2 = "C|Java,C++|Go,Python\tScala"
    val arr3: Array[String] = line2.split(Array('|', ',', '\t'))
    println(s"arr1 = ${arr3.toBuffer}")

    // 拆分为Map
    val line3 = "k1=v1|k2=v2|k3=v3"
    val map = line3.split("\\|")
      .map { kv =>
        val fields = kv.split("=")
        (fields(0), fields(1))
      }.toMap
    println(s"map = $map")
    
	// 按长度拆分
    val iter = "qqqaaazzzwwwss".grouped(3)
    println(s"iter = ${iter.toBuffer}")
  }
  
	
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值