regex:如何格式化整个字符串而不是字符串的一部分

yfjy0ee7  于 2023-06-25  发布在  其他
关注(0)|答案(2)|浏览(157)

我试图格式化整个字符串,但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"))

我做错了什么?

eqqqjvef

eqqqjvef1#

expression.replace(label, format("isRuleLabelSuccess(\"{0}\")", label));

您只替换“rule.1”,因此您将获得“isRuleLabelSuccess(“rule.1”)”,并在末尾添加“0”,因为它不是选择的一部分。

解决方案:

1.您可以将“rule. 10”作为标签传递
或者

  1. return "!(isRuleLabelSuccess(" + predicate + "))";
abithluo

abithluo2#

值得注意的是,这里没有 regex,它被称为 * string interpolation *。
你有 labelpredicate,在方法中交换。

  • expression* 的值应该是 label

而且,format 方法应该使用 predicate

private static String buildExprByField(String label, String predicate) {
    String expression = label;
    expression = expression.replace(label, format("isRuleLabelSuccess(\"{0}\")", predicate));

    expression = "!(" + expression + ")";
    return expression;
}

输出量

!(isRuleLabelSuccess("rule.10"))

需要注意的是,我不确定 MessageFormat 是否是必需的-它通常与 * Logger * 类中常见的重 * 字符串插值 * 一起使用。

  • String * 类提供了一组简单得多的方法,这些方法是从 * Formatter * 类继承而来的。

特别是 String#formatString#formatted 方法。
注意,语法与 MessageFormat 不同。并且,继承自 * C programming language *。
这是一篇关于 * C风格格式 * 的维基百科文章-也被称为 “printf格式”
此外,用于 FormatterJavaDoc(我在上面链接了它)提供了详尽的参数集。
下面是一个基本的例子。

expression = expression.replace(label, String.format("isRuleLabelSuccess(\"%s\")", predicate));
expression = expression.replace(label, "isRuleLabelSuccess(\"%s\")".formatted(predicate));

作为最后一项措施,这里有一种更简单的方法来编码整个任务。

return "!(%s)".formatted("isRuleLabelSuccess(\"%s\")".formatted(predicate));

或者

return "!(isRuleLabelSuccess(\"%s\"))".formatted(predicate);

相关问题