9

是否有可能设置一个 String.format 参数,以便N使用输入的最后一个字符,例如:

String s = String.format("%1${N}s", "abcdef");

所以s包含"def"?这在脚本语言中很常见,您可以说

exp = "abcdef"
s = exp[-3]

编辑

好的,所以我不想格式化我的数据并在将其放入String#format函数时对其进行处理。这就是格式描述的重点。这种格式描述代表了一种模块化的形式,如果我必须事先格式化我的输入数据,尽管有一个格式化程序来了,但它会被严重破坏......

4

3 回答 3

2

不幸的是,即使是现在(y2017)Java 8 Formatter也不支持“子字符串”。

你可以试试:

  • 自由标记和slicing (substrings)

    // string 'abcde', evaluates to "bcd"
    <#assign s="abcde">
    ${s[1..3]}
    
  • Spring 表达式语言 (SpEL) 和expressions methods

    // string literal 'abcde', evaluates to "bcd"
    ExpressionParser parser = new SpelExpressionParser();
    String sub = parser.parseExpression("'abcde'.substring(2, 4)").getValue(String.class);
    
于 2017-02-20T12:20:27.260 回答
0

String#substring(int index)与您的脚本示例执行相同的操作:

String a = "abcdef";
String b = String.format("%s", a.substring(3));
于 2012-09-24T12:04:31.130 回答
0

我不清楚是否String.format有这种功能。但是使用 的功能String,就可以实现。

    int n = 10;
    String a = "01234567891234";

    // Split into to strings.
    String lastString = a.substring(a.length() - n);
    String firstString = a.substring(0, a.length() - n);

    // Format second string and result is concatenated with first.
    String formattedLastString = String.format("%15s", lastString);
    String formattedString = firstString.concat(formattedLastString);
于 2012-09-24T12:23:50.907 回答