/**
 * 字符串工具
 * @date 2020-09-17 10:00:14
 * @author 吴锋霖
 */
class StringUtils {

    /**
      * 是否为空
      * @param parameters
      */
    static isEmpty(parameters: any): Boolean {
        if (!parameters && parameters != false && parameters != 0) {
            return true
        }
        return parameters.toString().trim().length == 0
    }

    /**
     * 是不否为空
     * @param parameters
     */
    static isNotEmpty(parameters: any): boolean {
        return !this.isEmpty(parameters)
    }


    /**
     * 截取返回第一次出现[delimiter]定界符之前的子字符串
     * StringUtils.substringBefore('cm.ketyop.stc.cm-tools', '.') = cm
     * @param str 字符串
     * @param delimiter 定界符
     * @param missingDelimiterValue 如果字符串不包含定界符，则返回[missingDelimiterValue]，默认为原始字符串。
     */
    static substringBefore(str: string, delimiter: string, missingDelimiterValue: string = undefined): string {
        if (this.isEmpty(str)) {
            return str
        }
        const index = str.indexOf(delimiter)
        if(this.isEmpty(missingDelimiterValue)){
            missingDelimiterValue = str
        }
        return index == -1 ? missingDelimiterValue : str.substring(0, index)
    }


    /**
     * 截取返回最后一次出现[delimiter]定界符之前的子字符串
     * StringUtils.substringBefore('cm.ketyop.stc.cm-tools', '.') = cm.ketyop.stc
     * @param str 字符串
     * @param delimiter 定界符
     * @param missingDelimiterValue 如果字符串不包含定界符，则返回[missingDelimiterValue]，默认为原始字符串。
     */
    static substringBeforeLast(str: string, delimiter: string, missingDelimiterValue: string = undefined): string {
        if (this.isEmpty(str)) {
            return str
        }
        const index = str.lastIndexOf(delimiter)
         if(this.isEmpty(missingDelimiterValue)){
            missingDelimiterValue = str
        }
        return index == -1 ? missingDelimiterValue : str.substring(0, index)
    }


    /**
     * 截取返回第一次出现[delimiter]定界符之后的子字符串
     * 
     * StringUtils.substringAfter('cm.ketyop.stc.cm-tools', '.') = ketyop.stc.cm-tools
     * @param str 字符串
     * @param delimiter 定界符
     * @param missingDelimiterValue 如果字符串不包含定界符，则返回[missingDelimiterValue]，默认为原始字符串。
     */
    static substringAfter(str: string, delimiter: string, missingDelimiterValue: string = undefined): string {
        if (this.isEmpty(str)) {
            return str
        }
        const index = str.indexOf(delimiter)
         if(this.isEmpty(missingDelimiterValue)){
            missingDelimiterValue = str
        }
        return index == -1 ? missingDelimiterValue : str.substring(index + 1, str.length)
    }


    /**
     * 截取返回最后一次出现[delimiter]定界符之后的子字符串
     * 
     * StringUtils.substringAfterLast('cm.ketyop.stc.cm-tools', '.') = cm-tools
     * @param str 字符串
     * @param delimiter 定界符
     * @param missingDelimiterValue 如果字符串不包含定界符，则返回[missingDelimiterValue]，默认为原始字符串。
     */
    static substringAfterLast(str: string, delimiter: string, missingDelimiterValue: string = undefined): string {
        if (this.isEmpty(str)) {
            return str
        }
        const index = str.lastIndexOf(delimiter)
         if(this.isEmpty(missingDelimiterValue)){
            missingDelimiterValue = str
        }
        return index == -1 ? missingDelimiterValue : str.substring(index + 1, str.length)
    }

}

export { StringUtils }