1. ホーム

[解決済み】文字列フォーマットにおける名前付きプレースホルダー

2022-04-08 19:52:26

質問

Pythonで、文字列をフォーマットするとき、プレースホルダーを位置ではなく名前で埋めることができます。

print "There's an incorrect value '%(value)s' in column # %(column)d" % \
  { 'value': x, 'column': y }

Javaでも(できれば外部ライブラリなしで)可能なんでしょうかね?

どのように解決するのですか?

いつもありがとうございます。辞書を使ったPythonライクな文字列フォーマットです。私はJavaの初心者なので、どんなヒントでもありがたいです。

public static String dictFormat(String format, Hashtable<String, Object> values) {
    StringBuilder convFormat = new StringBuilder(format);
    Enumeration<String> keys = values.keys();
    ArrayList valueList = new ArrayList();
    int currentPos = 1;
    while (keys.hasMoreElements()) {
        String key = keys.nextElement(),
        formatKey = "%(" + key + ")",
        formatPos = "%" + Integer.toString(currentPos) + "$";
        int index = -1;
        while ((index = convFormat.indexOf(formatKey, index)) != -1) {
            convFormat.replace(index, index + formatKey.length(), formatPos);
            index += formatPos.length();
        }
        valueList.add(values.get(key));
        ++currentPos;
    }
    return String.format(convFormat.toString(), valueList.toArray());
}