You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							92 lines
						
					
					
						
							3.5 KiB
						
					
					
				
			
		
		
	
	
							92 lines
						
					
					
						
							3.5 KiB
						
					
					
				package com.ruoyi.common.core.text; | 
						|
 | 
						|
import com.ruoyi.common.utils.StringUtils; | 
						|
 | 
						|
/** | 
						|
 * 字符串格式化 | 
						|
 *  | 
						|
 * @author ruoyi | 
						|
 */ | 
						|
public class StrFormatter | 
						|
{ | 
						|
    public static final String EMPTY_JSON = "{}"; | 
						|
    public static final char C_BACKSLASH = '\\'; | 
						|
    public static final char C_DELIM_START = '{'; | 
						|
    public static final char C_DELIM_END = '}'; | 
						|
 | 
						|
    /** | 
						|
     * 格式化字符串<br> | 
						|
     * 此方法只是简单将占位符 {} 按照顺序替换为参数<br> | 
						|
     * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可<br> | 
						|
     * 例:<br> | 
						|
     * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b<br> | 
						|
     * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a<br> | 
						|
     * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br> | 
						|
     *  | 
						|
     * @param strPattern 字符串模板 | 
						|
     * @param argArray 参数列表 | 
						|
     * @return 结果 | 
						|
     */ | 
						|
    public static String format(final String strPattern, final Object... argArray) | 
						|
    { | 
						|
        if (StringUtils.isEmpty(strPattern) || StringUtils.isEmpty(argArray)) | 
						|
        { | 
						|
            return strPattern; | 
						|
        } | 
						|
        final int strPatternLength = strPattern.length(); | 
						|
 | 
						|
        // 初始化定义好的长度以获得更好的性能 | 
						|
        StringBuilder sbuf = new StringBuilder(strPatternLength + 50); | 
						|
 | 
						|
        int handledPosition = 0; | 
						|
        int delimIndex;// 占位符所在位置 | 
						|
        for (int argIndex = 0; argIndex < argArray.length; argIndex++) | 
						|
        { | 
						|
            delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition); | 
						|
            if (delimIndex == -1) | 
						|
            { | 
						|
                if (handledPosition == 0) | 
						|
                { | 
						|
                    return strPattern; | 
						|
                } | 
						|
                else | 
						|
                { // 字符串模板剩余部分不再包含占位符,加入剩余部分后返回结果 | 
						|
                    sbuf.append(strPattern, handledPosition, strPatternLength); | 
						|
                    return sbuf.toString(); | 
						|
                } | 
						|
            } | 
						|
            else | 
						|
            { | 
						|
                if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH) | 
						|
                { | 
						|
                    if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH) | 
						|
                    { | 
						|
                        // 转义符之前还有一个转义符,占位符依旧有效 | 
						|
                        sbuf.append(strPattern, handledPosition, delimIndex - 1); | 
						|
                        sbuf.append(Convert.utf8Str(argArray[argIndex])); | 
						|
                        handledPosition = delimIndex + 2; | 
						|
                    } | 
						|
                    else | 
						|
                    { | 
						|
                        // 占位符被转义 | 
						|
                        argIndex--; | 
						|
                        sbuf.append(strPattern, handledPosition, delimIndex - 1); | 
						|
                        sbuf.append(C_DELIM_START); | 
						|
                        handledPosition = delimIndex + 1; | 
						|
                    } | 
						|
                } | 
						|
                else | 
						|
                { | 
						|
                    // 正常占位符 | 
						|
                    sbuf.append(strPattern, handledPosition, delimIndex); | 
						|
                    sbuf.append(Convert.utf8Str(argArray[argIndex])); | 
						|
                    handledPosition = delimIndex + 2; | 
						|
                } | 
						|
            } | 
						|
        } | 
						|
        // 加入最后一个占位符后所有的字符 | 
						|
        sbuf.append(strPattern, handledPosition, strPattern.length()); | 
						|
 | 
						|
        return sbuf.toString(); | 
						|
    } | 
						|
}
 | 
						|
 |