zoukankan      html  css  js  c++  java
  • apache-commons-lang3之StringUtils使用集锦

    apache-commons-lang3之StringUtils使用集锦

    一.前言

    1.CharSequence

    StringUtils是处理字符串的工具类, String类实现CharSequence接口,为兼容不同实现类,StringUtils在处理字符串的传参为CharSequence类型

    二.方法

    1.判定是否为空

    判定是否为空,包括是否为null,空串,空格字符串等,同时传参时区分单一参数与不定长参数集,其中empty结尾的函数校验null和空串,blank加上了对于空格字符串一类的无意义字符串的校验.

    2.trim函数

    StringUtils.trim(final String str){} 字符串修建函数trim()在String类自带trim函数的基础上,新增了对于null的支持,传参为null返回null,非空字符串的操作即去除首尾空格的一般操作,并基于此衍生除两个函数trimToNull -- 空串返回null 和 trimToEmpty -- null返回空串.

    3.truncate函数

    截取函数truncate基于String类的substring方法实现,变更了传参逻辑,String类的substring函数传参起始索引与终止索引,StringUtils工具类的truncate函数则传参根字符串/起始索引(偏移量)/截取长度,更多了一种截取选择,适应不同的使用场景,源码如下:

    public static String truncate(final String str, final int offset, final int maxWidth) {
            if (offset < 0) {
                throw new IllegalArgumentException("offset cannot be negative");
            }
            if (maxWidth < 0) {
                throw new IllegalArgumentException("maxWith cannot be negative");
            }
            if (str == null) {
                return null;
            }
            if (offset > str.length()) {
                return EMPTY;
            }
            if (str.length() > maxWidth) {
                final int ix = offset + maxWidth > str.length() ? str.length() : offset + maxWidth;
                return str.substring(offset, ix);
            }
            return str.substring(offset);
     }

    4.strip函数

    strip函数与trim函数同属于字符串修剪方法实现, 不同在于trim处理字符串,strip可以对具体字符进行首尾的修剪,核心还是String类的substring函数,核心代码位于stripStart和stripEnd函数.

        public static String stripStart(final String str, final String stripChars) {
            int strLen;
            if (str == null || (strLen = str.length()) == 0) {
                return str;
            }
            int start = 0;
            if (stripChars == null) {
                while (start != strLen && Character.isWhitespace(str.charAt(start))) {
                    start++;
                }
            } else if (stripChars.isEmpty()) {
                return str;
            } else {
                while (start != strLen && stripChars.indexOf(str.charAt(start)) != INDEX_NOT_FOUND) {
                    start++;
                }
            }
            return str.substring(start);
        }
        public static String stripEnd(final String str, final String stripChars) {
            int end;
            if (str == null || (end = str.length()) == 0) {
                return str;
            }
    
            if (stripChars == null) {
                while (end != 0 && Character.isWhitespace(str.charAt(end - 1))) {
                    end--;
                }
            } else if (stripChars.isEmpty()) {
                return str;
            } else {
                while (end != 0 && stripChars.indexOf(str.charAt(end - 1)) != INDEX_NOT_FOUND) {
                    end--;
                }
            }
            return str.substring(0, end);
        }

    5.equals函数

    比较字符串是否相等,核心是CharSequenceUtils.regionMatch函数,逐字符比较,可区分大小写,出现不同即返回,包括equals和equalsIgnoreCase两种实现,以及拓展的对于不定长参数集equalsAny/equalsAnyIgnoreCase的支持.

    6.compare函数

    比较两个字符串,可区分大小写,核心逻辑为String.compareTo函数, 比较编码大小,返回第一个不同的差值,相同则返回0,整体业务逻辑类似equals,同时包含对于空参的支持,具体实现为compare和compareIgnoreCase

    7.indexOf函数

    获取字符串中子串索引,核心逻辑为CharSequenceUtils.indexOf(seq, searchChar, startPos)函数,此处包含场景比较多,包括从字符串起始位置/指定位置,顺序查找/逆序查找,简列如下:

    indexOf(final CharSequence seq, final int searchChar / final CharSequence serchSeq) 
    -- 获取字符(ASCII编码)位于字符串起始开始的第一个位置索引
    indexOf(final CharSequence seq, final int searchChar / final CHarSequence searchSeq, final int startPos)
    -- 获取字符(ASCII编码)位于字符串指定起始位置开始的第一个位置索引

    8.contains函数

    字符串参数间的包含关系,核心逻辑为CharSequenceUtils.indexOf(seq, searchChar, startPos)函数,如果子串在字符串的索引不小于零,则包含;对于空格的包含containsWhitespace则是遍历字符串逐一判定.

        public static boolean contains(final CharSequence seq, final CharSequence searchSeq) {
            if (seq == null || searchSeq == null) {
                return false;
            }
            return CharSequenceUtils.indexOf(seq, searchSeq, 0) >= 0;
        }

    9.substring函数

    StringUtils工具类对substring函数的应用场景足够细化,可应用多种场景,除开3,4的truncate和strip,另有细化的使用场景,例如首部/尾部/中间等位置开始截取的left/right/mid,指定子串位置开始的截取,包括substringBefore/substringAfter/substringBeforeLast/substringAfterLast/...

  • 相关阅读:
    java实现验证码功能
    C# 自动注册OCX方法
    wamp出现You don’t have permission to access/on this server提示
    C# 图像旋转代码
    C# 实现图像快速 水平 垂直 翻转
    C#创建Graphics对象的方法
    winform控件大小改变是防止背景重绘导致的闪烁(转载)
    C#中DataTable中Rows.Add 和 ImportRow 对比
    MongoDb C# 驱动操作示例
    解决c#所有单线程单元(STA)线程都应使用泵式等待基元(如 CoWaitForMultipleHandles),并在运行时间很长的操作过程中定期发送消息。 转载
  • 原文地址:https://www.cnblogs.com/nyatom/p/12401418.html
Copyright © 2011-2022 走看看