美文网首页
Guava记录 - Strings类

Guava记录 - Strings类

作者: 一点温柔 | 来源:发表于2019-10-10 11:19 被阅读0次

    guava提供了Strings类处理字符串相关。

    1、Strings.isNullOrEmpty(null)

    校验字符串是否是空或者null。值得注意的是空格不为空
    ( 等价于StringUtils.isEmpty() ).

    源码如下:

    public static boolean isNullOrEmpty(@Nullable String string) {
       return Platform.stringIsNullOrEmpty(string);
     }
    static boolean stringIsNullOrEmpty(@Nullable String string) {
       return string == null || string.isEmpty();
     }
    

    测试方法:

     System.out.println("===========测试isNullOrEmpty方法===============");
     System.out.println(Strings.isNullOrEmpty(null));
     System.out.println(Strings.isNullOrEmpty(""));
     System.out.println(Strings.isNullOrEmpty(" "));
     System.out.println(Strings.isNullOrEmpty("bob"));
     System.out.println(Strings.isNullOrEmpty("bob "));
    

    输出结果:


    image.png
    2、Strings.nullToEmpty(null)

    验证字符是否为null或者empty.

    System.out.println("===========测试isNullOrEmpty方法===============");
    System.out.println(Strings.nullToEmpty(null));
    
    3、Strings.emptyToNull(StringUtils.EMPTY)
    System.out.println("===========测试emptyToNull方法===============");
    System.out.println(Strings.emptyToNull(StringUtils.EMPTY));
    
    4、Strings.repeat()

    重复字符串内容方法,通过设置指定次数n,返回原字符*n后的字符.
    值得注意的是:重复次数小于0将会抛出异常、等于0会返回空串.

    测试方法如下:

    System.out.println("===========测试repeat方法===============");
    System.out.println(Strings.repeat("【abc】", 3));
    System.out.println(Strings.repeat("【abc】", 1));
    System.out.println(Strings.repeat("【abc】", 0));
    System.out.println(Strings.repeat("【abc】", -1));
    

    测试结果:


    image.png
    5、Strings.padStart()

    小于指定字符长度,缺省头补位方法

    源码如下:

    public static String padStart(String string, int minLength, char padChar) {
        checkNotNull(string); // eager for GWT.
        if (string.length() >= minLength) {
          return string;
        }
        StringBuilder sb = new StringBuilder(minLength);
        for (int i = string.length(); i < minLength; i++) {
          sb.append(padChar);
        }
        sb.append(string);
        return sb.toString();
      }
    

    方法的实现逻辑比较简单,长度小于指定最小长度时,缺省的长度大小每个单位用指定char前补位.

    测试方法如下:

    System.out.println("===========测试padStart方法===============");
    char testChar = 'e';
    System.out.println(Strings.padStart("abc", 5, testChar));
    System.out.println(Strings.padStart("ABC", 6, testChar));
    

    测试结果:


    image.png
    6、Strings.padEnd()

    小于指定字符长度,缺省尾补位方法

    源码如下:

    public static String padEnd(String string, int minLength, char padChar) {
        checkNotNull(string); // eager for GWT.
        if (string.length() >= minLength) {
          return string;
        }
        StringBuilder sb = new StringBuilder(minLength);
        sb.append(string);
        for (int i = string.length(); i < minLength; i++) {
          sb.append(padChar);
        }
        return sb.toString();
      }
    

    与前补位类似,长度小于指定最小长度时,缺省的长度大小每个单位用指定char后补位.

    测试方法如下:

     System.out.println("===========测试padEnd方法===============");
     char testEndChar = 'e';
     System.out.println(Strings.padEnd("abc", 5, testEndChar));
     System.out.println(Strings.padEnd("ABC", 6, testEndChar));
    

    测试结果:


    image.png
    7、Strings.commonPrefix()

    返回公共前缀方法,如果没有公共前缀,则返回空字符串

    源码如下:

    public static String commonPrefix(CharSequence a, CharSequence b) {
        checkNotNull(a);
        checkNotNull(b);
    
        int maxPrefixLength = Math.min(a.length(), b.length());
        int p = 0;
        while (p < maxPrefixLength && a.charAt(p) == b.charAt(p)) {
          p++;
        }
        if (validSurrogatePairAt(a, p - 1) || validSurrogatePairAt(b, p - 1)) {
          p--;
        }
        return a.subSequence(0, p).toString();
      }
    

    大致逻辑以最小长度的字符串作为最大可能的公共前缀长度,然后对每个相同下标的char进行比对,得出公共前缀

    测试方法如下:

    System.out.println("===========测试commonPrefix方法===============");
    System.out.println(Strings.commonPrefix("aaaaa","b"));
    System.out.println(Strings.commonPrefix("aaaaa","aaab"));
    System.out.println(Strings.commonPrefix("abc","abcb"));
    

    测试结果:


    image.png
    8、Strings.commonSuffix()

    返回公共后缀方法,如果没有公共后缀,则返回空字符串

    源码如下:

    public static String commonSuffix(CharSequence a, CharSequence b) {
        checkNotNull(a);
        checkNotNull(b);
    
        int maxSuffixLength = Math.min(a.length(), b.length());
        int s = 0;
        while (s < maxSuffixLength && a.charAt(a.length() - s - 1) == b.charAt(b.length() - s - 1)) {
          s++;
        }
        if (validSurrogatePairAt(a, a.length() - s - 1)
            || validSurrogatePairAt(b, b.length() - s - 1)) {
          s--;
        }
        return a.subSequence(a.length() - s, a.length()).toString();
      }
    

    与Strings.commonSuffix()逻辑类似,不过最终得到公共后缀

    测试方法如下:

    System.out.println("===========测试commonSuffix方法===============");
    System.out.println(Strings.commonSuffix("aaaaa","acbaa"));
    System.out.println(Strings.commonSuffix("aaaaa","aaab"));
    System.out.println(Strings.commonSuffix("abcc","abacbc"));
    

    测试结果如下:


    image.png

    相关文章

      网友评论

          本文标题:Guava记录 - Strings类

          本文链接:https://www.haomeiwen.com/subject/fxzvuctx.html