字符串.format()用于字符串的最后几个字符的格式化。

9

有没有可能设置一个String.format参数,使得输入的最后N个字符被使用,就像这样:

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

如何确保变量s包含"def"呢?在脚本语言中,通常可以这样写:
exp = "abcdef"
s = exp[-3]

编辑

好的,我不想在将数据放入String#format函数时进行格式化和处理。这就是此处格式说明的整个意义。该格式说明代表了一种模块化形式,如果我必须先格式化输入数据而后面还有格式化程序的话,那么这种模块化将被大大破坏...


1
你可以使用substring方法来获取字符串的结尾。 - Peter Lawrey
1
是的,但这需要额外的处理,而且不会自动进行格式化。 - Bondax
1
我不认为处理/截断字符串是格式化。 - Peter Lawrey
我认为这是格式化,就像你使用省略号时一样。 - CHAN
3个回答

2

不幸的是,即使到现在(2017年),Java 8 Formatter仍不支持“substring”。

你可以尝试以下方法:

  • Freemarker and slicing (substrings):

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

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

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);

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接