package com.jiajian.start.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * TODO:
 *
 * @author jiajian
 * @date 2023/4/11 10:29
 */
public class StringUtil {

    List<String> uppers = Stream.iterate((int)'A',(x)->(x+1)).limit(26).
            map(x->String.valueOf((char) ((int)x))).collect(Collectors.toList());
    List<String> lowers = Stream.iterate((int)'a',(x)->(x+1)).limit(26).
            map(x->String.valueOf((char) ((int)x))).collect(Collectors.toList());
    List<String> numbers = Stream.iterate(0,(x)->x+1).limit(10).map(x->String.valueOf(x)).collect(Collectors.toList());

    /**
     * @Function: 将含有占位符的字符串的占位符转换为替换占位符后的字符串
     * @Param:
     * @Return:
    */
    public String parseFormatString(String sourceString,String format,Object...objects){
        sourceString = sourceString.replace(format,"%s");
        return String.format(sourceString,objects);
    }

    /**
     * 制造一个由数字,大小写字母组合成的字符串
     * [length]
     * @return java.lang.String
     * @throw
     */
    public String getRandomString(int length){
        ArrayList<String> results =  new ArrayList<>();
        Random random = new Random();
        // 随机字符源
        List<String> sources = new ArrayList<>();
        sources.addAll(uppers);
        sources.addAll(lowers);
        sources.addAll(numbers);
        for (int i = 0; i < length; i++) {
            int index = random.nextInt(62);
            results.add(sources.get(index));
        }
        return String.join("",results);
    }

    /**
     * @Param: 下划线规则字符串,是否首字母大写
     * @Function: 将下划线规则字符串转换为驼峰规则
     * @Return: 驼峰规则字符串
     */
    public String getHumpFromUnderLineString(String sourceString,boolean isFirstCharUpper){
        // 截断为几个单个字符串
        String[] stringArray = sourceString.split("_");
        int i = 1;
        if(isFirstCharUpper){
            // 如果首字母大写
            i = 0;
        }
        for (; i < stringArray.length; i++) {
            // 后续部分逐个大写首字母
            stringArray[i] = getFirstCharUp(stringArray[i]);
        }

        // 组装返回
        return String.join("",stringArray);
    }

    /**
     * @Param: 普通字符串
     * @Function: 将首字母大写
     * @Return: 首字母大写的对应字符串
     */
    public String getFirstCharUp(String sourceString){
        return sourceString.substring(0,1).toUpperCase() + sourceString.substring(1);
    }

    public static void main(String[] args) {
        StringUtil stringUtil = new StringUtil();
        // stringUtil.getRandomString(18);
        // System.out.println(stringUtil.getHumpFromUnderLineString("sjhs_hj_icds",true));;
    }
}