文字列テンプレートツールクラス: StrFormatter

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 staticfinal char C_DELIM_END = '}'; 

    /** 
     * フォーマット文字列<br> 
     * このメソッドは単純に変換します プレースホルダー {} は置き換えられますパラメータを順番に指定します<br> 
     * {}を出力したい場合は\\escape{を使用します。{}の前に\を出力したい場合は二重エスケープ文字\\\\を使用します。<br> * 例:< 
     br > 
     * 一般的に使用される: format("これは {} の {}", "a","b") -> これは b の a です<br>
     * Escape {}: format("this is \\{} for {}", "a", "b") -> this is \{} for a<br> * Escape \: format(" this is 
     \\ \\{} for {}", "a", "b") -> これは \a for b<br> 
     * 
     * @param strPattern 文字列テンプレート
     * @param argArray パラメータ リスト
     * @return result 
     */ 
    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 handlePosition = 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, handlePosition, 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])); 
                        handlerPosition = delimIndex + 2; 
                    } 
                    else 
                    { 
                        // プレースホルダーは変換されます Definition 
                        argIndex --;
                        sbuf.append(strPattern,HandlingPosition,delimIndex - 1);
                        sbuf.append(C_DELIM_START); 
                        handlerPosition = delimIndex + 1; 
                    } 
                } 
                else 
                { 
                    // 通常のプレースホルダー
                    sbuf.append(strPattern, handlePosition, delimIndex); 
                    sbuf.append(Convert.utf8Str(argArray[argIndex])); 
                    handlerPosition = delimIndex + 2; 
                } 
            } 
        } 
        // 最後のプレースホルダーの後にすべての文字を追加
        sbuf.append(strPattern, handlePosition, strPattern.length()); 

        return sbuf.toString(); 
    }


     //Case、文字列テンプレート: 「これは {} の {} です」、{} はプレースホルダー記号、「a」、「b」は置換されるデータ、結果はこれですis a for b
     public static void main(String[] args) { 
        String format = StrFormatter.format( "this is {} for {}", "a", "b"); 
        System.out.println(format); 
    } 
}

おすすめ

転載: blog.csdn.net/snowing1997/article/details/131719919