日常使用自定义工具类

字符串处理

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.IntStream;

public class MyStringUtils {

    public static void main(String[]args){

    }


    /**  将一个字符串重复N次  str: 源字符串  repeat: 重复的次数  */
    public static String repeat(String str, int repeat) {
        if (str == null) {
            return null;
        }
        if (repeat <= 0) {
            return null;
        }
        int inputLength = str.length();
        if (repeat == 1 || inputLength == 0) {
            return str;
        }
        if (inputLength == 1 && repeat <= 8192) {
            return repeat(str.charAt(0), repeat);
        }
        int outputLength = inputLength * repeat;
        switch (inputLength) {
            case 1:
                return repeat(str.charAt(0), repeat);
            case 2:
                char ch0 = str.charAt(0);
                char ch1 = str.charAt(1);
                char[] output2 = new char[outputLength];
                for (int i = repeat * 2 - 2; i >= 0; i--, i--) {
                    output2[i] = ch0;
                    output2[i + 1] = ch1;
                }
                return new String(output2);
            default:
                StringBuilder buf = new StringBuilder(outputLength);
                for (int i = 0; i < repeat; i++) {
                    buf.append(str);
                }
                return buf.toString();
        }
    }

    /** 将一个字符串重复N次,并且中间加上指定的分隔符 */
    public static String repeat(String str, String separator, int repeat) {
        if (str == null || separator == null) {
            return repeat(str, repeat);
        } else {
            // given that repeat(String, int) is quite optimized, better to rely
            // on it than try and splice this into it
            String result = repeat(str + separator, repeat);
            return removeEnd(result,separator);
        }
    }


    /**  将某个字符重复N次. */
    public static String repeat(char ch, int repeat) {
        char[] buf = new char[repeat];
        for (int i = repeat - 1; i >= 0; i--) {
            buf[i] = ch;
        }
        return new String(buf);
    }


    /** 字符串长度达不到指定长度时,在字符串右边补指定的字符 str:源字符串  size:指定的长度  padChar:进行补充的字符 */
    public static String rightPad(String str, int size, char padChar) {
        if (str == null) {
            return null;
        }
        int pads = size - str.length();
        if (pads <= 0) {
            return str; // returns original String when possible
        }
        if (pads > 8192) {
            return rightPad(str,size, String.valueOf(padChar));
        }
        return str.concat(repeat(padChar,pads));
    }

    /**  扩大字符串长度,从左边补充指定字符  str:源字符串  size:扩大后的长度  padStr:在右边补充的字符串  */
    public static String rightPad(String str, int size, String padStr) {
        if (str == null) {
            return null;
        }
        if (isEmpty(padStr)) {
            padStr = " ";
        }
        int padLen = padStr.length();
        int strLen = str.length();
        int pads = size - strLen;
        if (pads <= 0) {
            return str; // returns original String when possible
        }
        if (padLen == 1 && pads <= 8192) {
            return rightPad(str, size, padStr.charAt(0));
        }

        if (pads == padLen) {
            return str.concat(padStr);
        } else if (pads < padLen) {
            return str.concat(padStr.substring(0, pads));
        } else {
            char[] padding = new char[pads];
            char[] padChars = padStr.toCharArray();
            for (int i = 0; i < pads; i++) {
                padding[i] = padChars[i % padLen];
            }
            return str.concat(new String(padding));
        }
    }

    /**  从右边截取字符串  str:源字符串 len:长度  */
    public static String right(String str, int len) {
        if (str == null) {
            return null;
        }
        if (len < 0) {
            return null;
        }
        if (str.length() <= len) {
            return str;
        }
        return str.substring(str.length() - len);
    }


    /** 从源字符串中移除指定结尾的子字符串 */
    public static String removeEnd(String str, String remove) {
        if (isEmpty(str) || isEmpty(remove)) {
            return str;
        }
        if (str.endsWith(remove)) {
            return str.substring(0,str.length() - remove.length());
        }
        return str;
    }

    /**  反转字符串 */
    public static String reverse(String str) {
        if (str == null) {
            return null;
        }
        return new StringBuilder(str).reverse().toString();
    }

    /**  检查字符串是否全部为小写 */
    public static boolean isAllLowerCase(String cs) {
        if (cs == null || isEmpty(cs)) {
            return false;
        }
        int sz = cs.length();
        for (int i = 0; i < sz; i++) {
            if (Character.isLowerCase(cs.charAt(i)) == false) {
                return false;
            }
        }
        return true;
    }

    /**  检查字符串是否都是大写 */
    public static boolean isAllUpperCase(String cs) {
        if (cs == null || MyStringUtils.isEmpty(cs)) {
            return false;
        }
        int sz = cs.length();
        for (int i = 0; i < sz; i++) {
            if (Character.isUpperCase(cs.charAt(i)) == false) {
                return false;
            }
        }
        return true;
    }

    /** 判断字符串是否纯数字 */
    public static boolean isDigital(String str){
             if (!isEmpty(str))
                     return str.matches("[0-9]+");
             return false;
    }

    /**  字符串数组转换List<String> */
    public static List<String> stringsToList(String[] items) {
             List<String> lists = new ArrayList<>();
             for(int i=0; i<items.length; i++){
                     lists.add(items[i]);
                 }
             return lists;
    }


    /** 去掉字符串中的空格、回车、换行符、制表符 */
    public static String replaceBlank(String str) {
        String dest = "";
        if (str != null) {
            Pattern p = Pattern.compile("\\s*|\t|\r|\n|");
            Matcher m = p.matcher(str);
            dest = m.replaceAll("");
            // 将ASCII的值为160的替换为空字符串
            dest = dest.replace(backStr(160), "");
        }
        return dest;
    }

    /** 去掉字符串中的空格、回车、换行符、制表符、斜杠、点、冒号 */
    public static String replaceBlanks(String str) {
        str = replaceBlank(str);
        String dest = "";
        if (str != null) {
            Pattern p = Pattern.compile("/|\\.|\\:|");
            Matcher m = p.matcher(str);
            dest = m.replaceAll("");
        }
        return dest;
    }

    /**  删除字符串左侧所有字符ch */
     public static String deleteLeftChar(String data, char ch){
         int flag = 0;
         for(int i = 0;i<data.length();i++){
                 if(data.charAt(i) == ch){
                         flag = i;
                     }else{
                         break;
                     }
             }
         flag = flag+1;
         data = data.substring(flag);
         return data;
     }

     /** 删除字符串右侧所有字符ch*/
     public static String deleteRightChar(String data, char ch){
         int flag = data.length();
         for(int i = data.length()-1;i>=0;i--){
                 if(data.charAt(i) == ch){
                         flag = i;
                     }else{
                         break;
                     }
             }
         data = data.substring(0,flag);
         return data;
     }


    /** 根据某个字符对字符串进行分割 */
    public static String[] spiltStr(String str,String reg) {
        str = replaceBlank(str);
        String[] spilt = str.split(reg);
        return spilt;
    }

    /** 按照前后标识拆分字符串   allStr:要拆分字符串   startStr:前标识   endStr:后标识  */
    public static String cutString(String allStr,String startLog,String endLog){
        allStr = allStr.substring(allStr.indexOf(startLog),allStr.indexOf(endLog));
        allStr = allStr.substring(startLog.length(),allStr.length());
        return allStr;
    }


    /** 拼串 */
    public static String mergeStr(String...strings) {
        StringBuilder sb = new StringBuilder();
        for (String str : strings) {
            sb.append(str);
        }
        return sb.toString();
    }

    /** ASC 转字符串 */
    public static String backStr(int backnum) {
        char strChar = (char) backnum;
        return String.valueOf(strChar);
    }

    /** 判断字符串是否为空 */
    public static boolean isEmpty(String str) {
        if (str == null||str.isEmpty()||str.length()==0||"null".equals(str)||"NULL".equals(str)) {
            return true;
        }else {
            return false;
        }

    }

    /** 验证邮箱格式 */
    public static boolean isEmail(String email) {
        if (email == null) {
            return false;
        }
        return Pattern.matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$",email);
    }

    /** 验证手机格式 */
    public static boolean isPhone(String phoneNum) {
        if (phoneNum == null) {
            return false;
        }
        //验证规则,手机号第一位为1,后面十位为数字
        return Pattern.matches("^1(\\d{10})$", phoneNum);
    }

    /** 验证身份证号 */
    public static boolean isIdentity(String identity) {
          final int[] COEFFICIENT_ARRAY = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
          // 身份证号的尾数规则
          final String[] IDENTITY_MANTISSA = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
          final String IDENTITY_PATTERN = "^[0-9]{17}[0-9Xx]$";
        if (identity == null) {
            return false;
        }
        if (identity.length() != 18) {
            return false;
        }
        if (!identity.matches(IDENTITY_PATTERN)) {
            return false;
        }
        char[] chars = identity.toCharArray();
        long sum = IntStream.range(0, 17).map(index -> {
            char ch = chars[index];
            int digit = Character.digit(ch, 10);
            int coefficient = COEFFICIENT_ARRAY[index];
            return digit * coefficient;
        }).summaryStatistics().getSum();
        // 计算出的尾数索引
        int mantissaIndex = (int) (sum % 11);
        String mantissa = IDENTITY_MANTISSA[mantissaIndex];
        String lastChar = identity.substring(17);
        if (lastChar.equalsIgnoreCase(mantissa)) {
            return true;
        } else {
            return false;
        }
    }


}

日期时间处理

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

public class MyDataTimeUtils {


    // Java8 处理时间
    public static void useJava8DateTime(){
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        // 获取当前日期
        LocalDate date = LocalDate.now();
        System.out.println("当前日期: " + date);


        // 获取当前时间
        LocalTime time = LocalTime.now();
        System.out.println("当前时间: " + time);



        // 上海时间
        ZoneId shanghaiZoneId = ZoneId.of("Asia/Shanghai");
        ZonedDateTime shanghaiZonedDateTime = ZonedDateTime.now(shanghaiZoneId);
        // 东京时间
        ZoneId tokyoZoneId = ZoneId.of("Asia/Tokyo");
        ZonedDateTime tokyoZonedDateTime = ZonedDateTime.now(tokyoZoneId);
        System.out.println("上海时间: " + shanghaiZonedDateTime.format(formatter));
        System.out.println("东京时间: " + tokyoZonedDateTime.format(formatter));



        // 解析日期
        String dateText = "20180924";
        LocalDate parsDate = LocalDate.parse(dateText,DateTimeFormatter.BASIC_ISO_DATE);
        System.out.println("格式化之后的日期: " + parsDate);
        // 格式化日期
        dateText = date.format(DateTimeFormatter.ISO_DATE);
        System.out.println("dateText: " + dateText);



        // 日期时间转字符串
        LocalDateTime now = LocalDateTime.now();
        String nowStr = now.format(formatter);
        System.out.println("日期转字符串: " + nowStr);
        // 字符串转日期时间
        String datetimeText = "1999-12-31 23:59:59";
        LocalDateTime datetime = LocalDateTime.parse(datetimeText,formatter);
        System.out.println("字符串转日期: "+datetime);



        // 日期增量
        LocalDate nowDate = LocalDate.now();
        LocalDate aftetWeek = nowDate.plus(1, ChronoUnit.WEEKS);
        LocalDate aftetMonth = nowDate.plus(1,ChronoUnit.MONTHS);
        System.out.println("一周后: " + aftetWeek);
        System.out.println("一月后: " + aftetMonth);
        // 时间增量
        LocalTime nowTime = LocalTime.now();
        LocalTime afterHours = nowTime.plusHours(1);
        LocalTime afterSeconds = nowTime.plusSeconds(1);
        LocalTime afterNanos = nowTime.plusNanos(1000);
        System.out.println("一小时后: " + afterHours);
        System.out.println("一分后: " + afterSeconds);
        System.out.println("一千纳秒后: " + afterNanos);



        // 时间比较
        LocalDate nowPare = LocalDate.now();
        LocalDate date001 = LocalDate.of(2000, 12, 31);
        if (nowPare.isAfter(date001)) {
            System.out.println("2019年已经过去了");
        }
        LocalDate date002 = LocalDate.of(2021, 1, 1);
        if (nowPare.isBefore(date002)) {
            System.out.println("2021年还未到来");
        }
        LocalDate nowEquals = LocalDate.now();
        LocalDate setDate = LocalDate.of(2020, 5, 1);
        System.out.println("日期是否相等: " + nowEquals.equals(setDate));

    }

}

List处理

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class MyListUtils {

    public static void main(String[]args){

    }

    /** 单个List集合去除重复 */
    public static List<Object> removeRepeat(List<Object> list) {
        Set<Object> set = new HashSet<>(list);
        return new ArrayList<>(set);
    }


    /** 比较一个list集合里是否有重复*/
    public static boolean isRepeat(List<Object> list) {
        Set<Object> set = new HashSet<>(list);
        return set.size() != list.size();
    }

    /** 比较两个集合是否有重复 */
    public static boolean isRepeat(List<Object> list1, List<Object> list2){
        Set<Object> set001 = new HashSet<>(list1);
        Set<Object> set002 = new HashSet<>(list2);
        Set<Object> setAll = new HashSet<>(set001);
        setAll.addAll(set002);
        int setSize = set001.size() + set002.size();
        return setAll.size() != setSize;
    }

    /** 比较两个集合是否有重复(有相同移除第一个集合中的相同值) */
    public static List<Object> removeRepeat(List<Object> list001,List<Object> list002) {
        list001.removeAll(list002);
        return list001;
    }

    /**  求两个集合的交集 */
    //用hash这种很有用的数据结构来实现。 把第一个集合的所有元素都放进hashSet中,时间复杂度O(M)。
    // 再把第二个集合中的元素放进hashSet中,如果有重复元素,就是这2个集合的交集,时间复杂度为O(N)。即总的时间复杂度从O(M*N)降低到了O(M+N)。
    public static List<String> getIntersection(List<String> list001, List<String> list002) {
        List<String> commonList = new ArrayList<>();
        Set<Object> hashSet = new HashSet<>();
        Collections.addAll(hashSet,list001);
        for (String item : list002) {
            if (!hashSet.add(item)) {
                commonList.add(item);
            }
        }
        return commonList;
    }

    /**  求两个集合的并集 */
    public static List<Object> unionAll(List<Object> list1, List<Object> list2) {
        list1.removeAll(list2);
        list1.addAll(list2);
        return list1;
    }


    /**  拆分list */
    public static <T> List<List<T>> averageAssign( List<T> source, int splitItemNum ){
        List<List<T>> result = new ArrayList<List<T>>();
        if ( source != null && source.size() > 0 && splitItemNum > 0 ){
            if ( source.size() <= splitItemNum ){
                // 源List元素数量小于等于目标分组数量
                result.add( source );
            }else{
                // 计算拆分后list数量
                int splitNum = (source.size() % splitItemNum == 0 ) ? ( source.size() / splitItemNum ) : (source.size() / splitItemNum + 1);
                List<T> value = null;
                for ( int i = 0; i < splitNum; i++ ){
                    if ( i < splitNum - 1 ){
                        value = source.subList( i * splitItemNum, ( i + 1 ) * splitItemNum );
                    }else{
                        // 最后一组
                        value = source.subList( i * splitItemNum, source.size() );
                    }
                    result.add( value );
                }
            }
        }
        return result;
    }
    
    
}

Map处理

import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class MyMapUtils {
    
    public static void main(String[]args){

        Map<String,String> maps001 = new HashMap<>();

        Map<String,String> maps002 =creatManyValues("1","11","22","33","##");
        Map<String,String> maps003 = creatManyValues("a","aa","bb","cc","##");
        Map<String,String> maps004 = creatManyValues("b","yy","jj","kk","##");
        Map<String,String> maps005 = creatManyValues("c","vv","bb","hh","##");
        maps001.putAll(maps002);
        maps001.putAll(maps003);
        maps001.putAll(maps004);
        maps001.putAll(maps005);
        for(Map.Entry<String,String> map :maps001.entrySet()){
            String key = map.getKey();
            String value = map.getValue();
            String[] spilt = value.split("##");
            System.out.println("key: "+key+"    value: "+value);
            for (String str : spilt){
                System.out.print("str: "+str+"   ");
            }
            System.out.println("");
            System.out.println("************");
        }

    }


    /**  创建 一键对应多值(拼接) */
    public static Map creatManyValues(String key,String value01,String value02,String value03,String logo){
        Map<String,String> maps = new HashMap<>();
        String value = value01+logo+value02+logo+value03;
        maps.put(key,value);
        return maps;

    }

    /**  获取Map中key集合 */
    public static List<Object> getMapKey(Map<Object,Object> maps){
        List<Object> listKey = new ArrayList();
        for (Map.Entry<Object,Object> map :maps.entrySet()){
            Object key = map.getKey();
            listKey.add(key);
        }
        return listKey;
    }

    /**  获取Map中value集合 */
    public static List<Object> getMapValue(Map<Object,Object> maps){
        List<Object> listValue = new ArrayList();
        for (Map.Entry<Object,Object> map :maps.entrySet()){
            Object value = map.getValue();
            listValue.add(value);
        }
        return listValue;
    }

    /**  将map切成若干段,每段 chunkNum 个元素 */
    public static <k, v> List<Map<k, v>> mapChunk(Map<k, v> chunkMap, int chunkNum) {
        if (chunkMap == null || chunkNum <= 0) {
            List<Map<k, v>> list = new ArrayList<>();
            list.add(chunkMap);
            return list;
        }
        Set<k> keySet = chunkMap.keySet();
        Iterator<k> iterator = keySet.iterator();
        int i = 1;
        List<Map<k, v>> total = new ArrayList<>();
        Map<k, v> tem = new HashMap<>();
        while (iterator.hasNext()) {
            k next = iterator.next();
            tem.put(next, chunkMap.get(next));
            if (i == chunkNum) {
                total.add(tem);
                tem = new HashMap<>();
                i = 0;
            }
            i++;
        }
        if(!CollectionUtils.isEmpty(tem)){
            total.add(tem);
        }
        return total;
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值