我试图格式化整个字符串,但format函数匹配字符串的一部分并格式化它。
我添加下面的代码示例:
import java.security.Timestamp;
import java.time.Instant;
import java.time.ZoneId;
import static java.text.MessageFormat.format;
public class A {
private static String buildExprByField(String label,String predicate) {
String expression = predicate;
expression = expression.replace(label, format("isRuleLabelSuccess(\"{0}\")", label));
expression = "!(" + expression + ")";
return expression;
}
public static void main(String[] args) {
System.out.println(buildExprByField("rule.1","rule.10"));
}
}
输出:
!(isRuleLabelSuccess("rule.1")0)
我在努力
!(isRuleLabelSuccess("rule.10"))
我做错了什么?
2条答案
按热度按时间eqqqjvef1#
您只替换“rule.1”,因此您将获得“isRuleLabelSuccess(“rule.1”)”,并在末尾添加“0”,因为它不是选择的一部分。
解决方案:
1.您可以将“rule. 10”作为标签传递
或者
return "!(isRuleLabelSuccess(" + predicate + "))";
abithluo2#
值得注意的是,这里没有 regex,它被称为 * string interpolation *。
你有 label 和 predicate,在方法中交换。
而且,format 方法应该使用 predicate。
输出量
需要注意的是,我不确定 MessageFormat 是否是必需的-它通常与 * Logger * 类中常见的重 * 字符串插值 * 一起使用。
特别是 String#format 和 String#formatted 方法。
注意,语法与 MessageFormat 不同。并且,继承自 * C programming language *。
这是一篇关于 * C风格格式 * 的维基百科文章-也被称为 “printf格式”。
此外,用于 Formatter 的 JavaDoc(我在上面链接了它)提供了详尽的参数集。
下面是一个基本的例子。
作为最后一项措施,这里有一种更简单的方法来编码整个任务。
或者