• 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
  • 相关阅读:
    英文论文降重
    A100和H100两款NVIDIA顶级双精度浮点数矢量运算芯片被限制对华出口——警醒
    一段建筑学上的历史——“赫鲁晓夫楼”
    再探 游戏 《 2048 》 —— AI方法—— 缘起、缘灭(8) —— 2021年9月SOTA的TDL算法——《Optimistic Temporal Difference Learning for 2048》——完结篇
    说说中国高校理工科教育中的基础概念混乱问题——GPU是ASIC吗
    谈谈理工科生是否应该具备一定社会类学科的知识
    java程序在windows后台执行的办法
    Java maven 多模块实现
    Java maven 多模块实现 编译多架包 .jar
    插件报错:SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".解决方案
  • 原文地址:https://www.cnblogs.com/s-star/p/13236917.html
Copyright © 2020-2023  润新知