Google Guava

(一)Joiner

import com.google.common.base.Joiner;
import com.google.common.io.Files;
import org.junit.Test;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

import static com.google.common.collect.ImmutableMap.of;
import static java.util.stream.Collectors.joining;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.sameInstance;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;

public class JoinerTest {

    private final List<String> stringList = Arrays.asList(
            "beijing", "shanghai", "guangzhou", "shenzhen", "hangzhou"
    );

    private final List<String> stringListWithNull = Arrays.asList(
            "beijing", "shanghai", "guangzhou", "shenzhen", null
    );

    private final Map<String, String> stringMap = of("beijing", "shanghai", "guangzhou", "shenzhen");

    private final String targetFileName = "E:\txt\guava-joiner.txt";
    private final String targetFileNameToMap = "E:\txt\guava-joiner-map.txt";

    @Test
    public void testJoinOnJoin() {
        //按单个字符拆分
        String result = Joiner.on("#").join(stringList);
        assertThat(result, equalTo("beijing#shanghai#guangzhou#shenzhen#hangzhou"));
    }

    @Test(expected = NullPointerException.class)
    public void testJoinOnJoinWithNull() {
        //按单个字符拆分,遇到null抛出NullPointerException
        String result = Joiner.on("#").join(stringListWithNull);
        assertThat(result, equalTo("beijing#shanghai#guangzhou#shenzhen"));
    }

    @Test
    public void testJoinOnJoinWithNullButSkip() {
        //按单个字符拆分,跳过null
        String result = Joiner.on("#").skipNulls().join(stringListWithNull);
        assertThat(result, equalTo("beijing#shanghai#guangzhou#shenzhen"));
    }

    @Test
    public void testJoinOnJoinWithNullButUseDefaultValue() {
        //按单个字符拆分,用默认值替换null
        String result = Joiner.on("#").useForNull("DEFAULT").join(stringListWithNull);
        assertThat(result, equalTo("beijing#shanghai#guangzhou#shenzhen#DEFAULT"));
    }

    @Test
    public void testJoinOnAppendToStringBuilder() {
        //追加字符,使用每个之间先前配置的分离器
        final StringBuilder builder = new StringBuilder();
        StringBuilder resultBuilder = Joiner.on("#").useForNull("DEFAULT").appendTo(builder, stringListWithNull);
        assertThat(resultBuilder, sameInstance(builder));
        assertThat(resultBuilder.toString(), equalTo("beijing#shanghai#guangzhou#shenzhen#DEFAULT"));
        assertThat(builder.toString(), equalTo("beijing#shanghai#guangzhou#shenzhen#DEFAULT"));
    }

    @Test
    public void testJoinOnAppendToWriter() {
        //追加字符,写入文件
        try (FileWriter writer = new FileWriter(new File(targetFileName))) {
            Joiner.on("#").useForNull("DEFAULT").appendTo(writer, stringListWithNull);
            assertThat(Files.isFile().test(new File(targetFileName)), equalTo(true));
        } catch (IOException e) {
            fail("error.");
        }
    }

    @Test
    public void testJoiningByStreamSkipNull() {
        //分割字符,跳过null
        String result = stringListWithNull.stream()
                .filter(item -> item != null && !item.isEmpty())
                .collect(joining("#"));
        assertThat(result, equalTo("beijing#shanghai#guangzhou#shenzhen"));
    }

    @Test
    public void testJoiningByStreamUseDefaultValue() {
        //分割字符,用默认值替换null
        String result = stringListWithNull.stream()
                //.map(item -> item == null || item.isEmpty() ? "DEFAULT" : item)
                .map(this::defaultValue).collect(joining("#"));
        assertThat(result, equalTo("beijing#shanghai#guangzhou#shenzhen#DEFAULT"));
    }

    private String defaultValue(final String item) {
        return item == null || item.isEmpty() ? "DEFAULT" : item;
    }

    @Test
    public void testJoinOnWitnMap() {
        //指定字符连接map的key value
        String result = Joiner.on("#").withKeyValueSeparator("=").join(stringMap);
        assertThat(result, equalTo("beijing=shanghai#guangzhou=shenzhen"));
    }

    @Test
    public void testJoinOnWitnMapToAppendable() {
        //指定字符连接map的key value,写入文件
        try (FileWriter writer = new FileWriter(new File(targetFileNameToMap))) {
            Joiner.on("#").withKeyValueSeparator("=").appendTo(writer, stringMap);
            assertThat(Files.isFile().test(new File(targetFileNameToMap)), equalTo(true));
        } catch (IOException e) {
            fail("error.");
        }
    }
}

(二)Splitter

import com.google.common.base.Splitter;
import org.junit.Test;

import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;

import static org.hamcrest.core.IsEqual.equalTo;
import static org.hamcrest.core.IsNull.notNullValue;
import static org.junit.Assert.assertThat;

public class SplitterTest {

    @Test
    public void testSplitOnSplit() {
        //用指定字符分割
        List<String> result = Splitter.on("|").splitToList("hello|world");
        assertThat(result, notNullValue());
        assertThat(result.size(), equalTo(2));
        assertThat(result.get(0), equalTo("hello"));
        assertThat(result.get(1), equalTo("world"));
    }

    @Test
    public void testSplitOnSplitOmitEmpty() {
        //用指定字符分割,跳过空
        List<String> result = Splitter.on("|")
                .omitEmptyStrings().splitToList("hello | world||");
        assertThat(result, notNullValue());
        assertThat(result.size(), equalTo(2));
        assertThat(result.get(0), equalTo("hello "));
        assertThat(result.get(1), equalTo(" world"));
    }

    @Test
    public void testSplitOnSplitOmitEmptyTrimResult() {
        //用指定字符分割,去掉分割后前后空格,跳过空
        List<String> result = Splitter.on("|").trimResults()
                .omitEmptyStrings().splitToList("hello|world||");
        assertThat(result, notNullValue());
        assertThat(result.size(), equalTo(2));
        assertThat(result.get(0), equalTo("hello"));
        assertThat(result.get(1), equalTo("world"));
    }

    @Test
    public void testSplitFixLength() {
        //按固定长度拆分,最后一个可能比给定长度短,但不会为空
        List<String> result = Splitter.fixedLength(4).splitToList("aaaabbbbcccc");
        assertThat(result, notNullValue());
        assertThat(result.size(), equalTo(3));
        assertThat(result.get(0), equalTo("aaaa"));
        assertThat(result.get(1), equalTo("bbbb"));
        assertThat(result.get(2), equalTo("cccc"));
    }

    @Test
    public void testSplitOnSplitLimit() {
        //限制拆分出的字符串数量
        List<String> result = Splitter.on("#").limit(2).splitToList("hello#world#java");
        assertThat(result, notNullValue());
        assertThat(result.size(), equalTo(2));
        assertThat(result.get(0), equalTo("hello"));
        assertThat(result.get(1), equalTo("world#java"));
    }

    @Test
    public void testSplitOnPatternString() {
        //按正则拆分,传入正则字符串
        List<String> result = Splitter.onPattern("\|").trimResults()
                .omitEmptyStrings().splitToList("hello | world|||java");
        assertThat(result, notNullValue());
        assertThat(result.size(), equalTo(3));
        assertThat(result.get(0), equalTo("hello"));
        assertThat(result.get(1), equalTo("world"));
        assertThat(result.get(2), equalTo("java"));
    }

    @Test
    public void testSplitOnPattern() {
        //按正则拆分,传入正则
        List<String> result = Splitter.on(Pattern.compile("\|")).
                trimResults().omitEmptyStrings().splitToList("hello | world|||java");
        assertThat(result, notNullValue());
        assertThat(result.size(), equalTo(3));
        assertThat(result.get(0), equalTo("hello"));
        assertThat(result.get(1), equalTo("world"));
        assertThat(result.get(2), equalTo("java"));
    }

    @Test
    public void testSplitOnSplitToMap() {
        //按连接符拆成map
        Map<String, String> result = Splitter.on(Pattern.compile("\|")).trimResults().omitEmptyStrings()
                .withKeyValueSeparator("=").split("hello=HELLO | world=WORLD||");
        assertThat(result, notNullValue());
        assertThat(result.size(), equalTo(2));
        assertThat(result.get("hello"), equalTo("HELLO"));
        assertThat(result.get("world"), equalTo("WORLD"));
    }
}

(三)Strings

//空字符串变为null
System.out.println(Strings.emptyToNull("")); //null

//null变为空字符串
System.out.println(Strings.nullToEmpty(null)); //""
System.out.println(Strings.nullToEmpty("hello")); //hello

//取相同前缀
System.out.println(Strings.commonPrefix("Hello", "Hit")); //H
System.out.println(Strings.commonPrefix("Hello", "Xit")); //""

//取相同后缀
System.out.println(Strings.commonSuffix("Hello", "Echo")); //o

//字符串成倍数输出
System.out.println(Strings.repeat("Alex", 3)); //AlexAlexAlex

//判断是null或空
System.out.println(Strings.isNullOrEmpty(null)); //true
System.out.println(Strings.isNullOrEmpty("")); //true

//指定最小长度,不够用指定字符在前面添加
System.out.println(Strings.padStart("Alex", 3, 'H'));
System.out.println(Strings.padStart("Alex", 5, 'H')); //HAlex
//指定最小长度,不够用指定字符在后面添加
System.out.println(Strings.padEnd("Alex", 5, 'H')); //AlexH

(四)Charsets

//获取字符集编码
Charset charset = Charset.forName("UTF-8");
System.out.println(Charsets.UTF_8 == charset); //true

(五)CharMatcher

//判断是否是数字
System.out.println(CharMatcher.javaDigit().matches('5')); //true
System.out.println(CharMatcher.javaDigit().matches('a')); //false

//统计含有字符的个数
System.out.println(CharMatcher.is('A').countIn("AaaaAbbb")); //2

//用指定字符替换空格,连续多个空格去重,返回原始
System.out.println(CharMatcher.breakingWhitespace().collapseFrom("   aa bb  ", '*')); //*aa*bb*

//用指定字符替换数字,返回副本,返回副本
System.out.println(CharMatcher.javaDigit().replaceFrom("abc  123abc", "*")); //abc  ***abc

//移除指定字符
System.out.println(CharMatcher.javaDigit().or(CharMatcher.whitespace()).removeFrom("aaa 111 bbb")); //aaabbb

//除指定字符外全部移除
System.out.println(CharMatcher.javaDigit().or(CharMatcher.whitespace()).retainFrom("aaa 111 bbb")); // 111

//用指定字符替换空格,连续多个空格去重,返回原始
System.out.println(CharMatcher.whitespace().trimAndCollapseFrom("   aa bb   cc", ' ')); //aa bb cc

(六)CaseFormat

//指定字符串格式转换
//lower-hyphen变为lowerCamel
System.out.println(CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, "test-data")); //testData
//lower_underscore变为lowerCamel
System.out.println(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "test_data")); //testData
//lower_underscore变为UpperCamel
System.out.println(CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, "test_data")); //TestData
原文地址:https://www.cnblogs.com/s-star/p/13236917.html