gpt4 book ai didi

java - java中如何将字符串的多个子字符串替换为多个值?

转载 作者:行者123 更新时间:2023-12-02 01:10:50 26 4
gpt4 key购买 nike

我有一个长字符串,它是动态的。无论在哪里找到 % XXX %,我都必须获取 XXX 值并将其替换为其他值。将会有多个%XXX%。如何获取 % % 内的值?

对于例如。

"POLICY_NO = %POLNO%  and b.ACTION_TIME = (select max(ACTION_TIME) from POLICY_DETAILS where POLICY_NO = %POLICYID%)"

如何读取 2 % 之间的每个值?我必须获取 POLNO 并将其与一些 session 变量进行比较(例如,POLNO=1234567,POLICYID=3),如果匹配,那么我必须替换 session 变量值。那么查询应该变成

“POLICY_NO = 1234567 和 b.ACTION_TIME =(从 POLICY_DETAILS 中选择 max(ACTION_TIME),其中 POLICY_NO = 3)”

最佳答案

仅考虑字符串中的替换:

  • 如果您不知道应该替换哪些变量或其值,您可以这样做:

    // Map simulate your session variables.
    Map<String, String> variables = new HashMap<String, String>();
    variables.put("POLNO", "V1");
    variables.put("POLICYID", "V2");

    String input =
    /**/"POLICY_NO = %POLNO% and A.POLICY_DETAILS_ID = " +
    /**/"b.POLICY_DETAILS_ID and b.ACTION_TIME = " +
    /**/"(select max(ACTION_TIME) from POLICY_DETAILS " +
    /**/"where POLICY_NO = %POLICYID%)";

    StringBuilder output = new StringBuilder(input);

    int offset = 0;

    Matcher matcher = Pattern.compile("(%)([^%]*)(%)").matcher(input);
    while (matcher.find()) {
    // Get only second group (variable name), ignoring % symbols
    String variable = matcher.group(2);
    String value = variables.get(variable);

    // Calculate the offset.
    // The previous replaces can change the string length
    int start = matcher.start() + offset;
    int end = matcher.end() + offset;

    // Replace %XXX% by its value
    output.replace(start, end, value);

    offset -= variable.length() + 2 - value.length();
    }
  • 否则,您可以链接多次调用:

    String.replace("%XXX%", "VALUE")

关于java - java中如何将字符串的多个子字符串替换为多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10332218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com