是否可以设置String.format参数,以便使用输入的最后N
个字符,例如:
String s = String.format("%1${N}s", "abcdef");
以便s
包含"def"
?这在脚本语言中很常见,您可以说
exp = "abcdef"
s = exp[-3]
修改
好的,所以我不想格式化我的数据并在将它放入String#format
函数时处理它。这就是格式描述的重点。这种格式描述代表了一种模块化形式,如果我必须预先格式化我的输入数据,尽管有一个格式化程序,它会大大打破......
答案 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);