String.format()格式,用于字符串的最后一个字符

时间:2012-09-24 11:52:35

标签: java string format

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

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

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

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

修改

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

3 个答案:

答案 0 :(得分:1)

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

您可以尝试:

  • Freemarker和slicing (substrings)

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

    // string literal 'abcde', evaluates to "bcd"
    ExpressionParser parser = new SpelExpressionParser();
    String sub = parser.parseExpression("'abcde'.substring(2, 4)").getValue(String.class);
    

答案 1 :(得分:0)

String#substring(int index)与您的脚本示例完全相同:

String a = "abcdef";
String b = String.format("%s", a.substring(3));

答案 2 :(得分: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);