Guava入门~Splitter


String.split()问题:中间保留,最后丢弃

String commaSeparatedString  = "Foo,,Bar,,Baz,,,";
String[] words = commaSeparatedString.split(",");
//[Foo, , Bar, , Baz]
System.out.println(Arrays.toString(words));

演示

import java.util.Map;
import org.hamcrest.CoreMatchers;
import org.junit.Assert;
import com.google.common.base.CharMatcher;
import com.google.common.base.Splitter;
import com.google.common.collect.Maps;

/**
 * TODO 在此写上类的相关说明.<br>
 * @author gqltt<br>
 * @version 1.0.0 2021年11月11日<br>
 * @see 
 * @since JDK 1.5.0
 */
public class SplitterDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		splitOnCharacter();
		splitOnString();
		splitPattern();
		splitTrimEmpty();
		splitTrimDigit();
		splitKeepMissing();
		splitOmitMissing();
	}

	/**
	 * 按字符切割.
	 */
    static void splitOnCharacter() {
        char delimiter = '|';
        String text = "foo|bar|baz";
        String[] expected = new String[]{"foo","bar","baz"};
        Iterable<String> values = Splitter.on(delimiter).split(text);
        int index = 0;
        for (String value : values) {
        	Assert.assertThat(value, CoreMatchers.is(expected[index++]));
        }
    }
    
    /**
     * 按字符串切割.
     */
    static void splitOnString() {
        String delimiter = "&";
        String text = "foo&bar&baz";
        String[] expected = new String[]{"foo","bar","baz"};
        Iterable<String> values = Splitter.on(delimiter).split(text);
        int index = 0;
        for (String value : values) {
        	Assert.assertThat(value, CoreMatchers.is(expected[index++]));
        }
    }
    
    /**
     * 按正则表达式切割.
     */
    static void splitPattern() {
        String pattern = "\\d+";
        String text = "foo123bar45678baz";
        String[] expected = new String[]{"foo","bar","baz"};
        Iterable<String> values = Splitter.onPattern(pattern).split(text);
        int index = 0;
        for (String value : values) {
        	Assert.assertThat(value, CoreMatchers.is(expected[index++]));
        }
    }
    
    /**
     * 裁剪空串.
     */
    static void splitTrimEmpty() {
        String delimiter = "&";
        String text = "foo   &  bar&   baz  ";
        String[] expected = new String[]{"foo","bar","baz"};
        Iterable<String> values = Splitter.on(delimiter).trimResults().split(text);
        int index = 0;
        for (String value : values) {
        	Assert.assertThat(value, CoreMatchers.is(expected[index++]));
        }
    }
    
    /**
     * 裁剪数字.
     */
    static void splitTrimDigit(){
        String delimiter = "&";
        String text = "1foo&bar2&2baz3";
        String[] expected = new String[]{"foo","bar","baz"};
        Iterable<String> values = 
        		Splitter.on(delimiter).trimResults(CharMatcher.javaDigit()).split(text);
        int index = 0;
        for (String value : values) {
        	Assert.assertThat(value, CoreMatchers.is(expected[index++]));
        }
    }
    
    /**
     * 保留空串.
     */
    static void splitKeepMissing(){
        char delimiter = '|';
        String text = "foo|bar|||baz";
        String[] expected = new String[]{"foo","bar","","","baz"};
        Iterable<String> values = Splitter.on(delimiter).split(text);
        int index = 0;
        for (String value : values) {
        	Assert.assertThat(value, CoreMatchers.is(expected[index++]));
        }
    }
    
    /**
     * 省略空串.
     */
    static void splitOmitMissing() {
        char delimiter = '|';
        String text = "foo|bar|||baz";
        String[] expected = new String[]{"foo","bar","baz"};
        Iterable<String> values = Splitter.on(delimiter).omitEmptyStrings().split(text);
        int index = 0;
        for (String value : values) {
        	Assert.assertThat(value, CoreMatchers.is(expected[index++]));
        }
    }
    
    /**
     * 切割成map.
     */
    static void splitMap() {
        String startSring = "Washington D.C=Redskins#New York City=Giants#Philadelphia=Eagles#Dallas=Cowboys";
        Map<String,String> testMap = Maps.newLinkedHashMap();
        testMap.put("Washington D.C","Redskins");
        testMap.put("New York City","Giants");
        testMap.put("Philadelphia","Eagles");
        testMap.put("Dallas","Cowboys");
        Splitter.MapSplitter mapSplitter = Splitter.on("#").withKeyValueSeparator("=");
        Map<String,String> splitMap = mapSplitter.split(startSring);
        Assert.assertThat(testMap, CoreMatchers.is(splitMap));
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值