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); } }
文字列テンプレートツールクラス: StrFormatter
おすすめ
転載: blog.csdn.net/snowing1997/article/details/131719919
ランキング