2

我被困在试图获得所需的输出。它实际上是我在另一个问题中面临的字符串分离问题。

// 输入
        String input1 = "=DIVIDE(Input!RC,Input!R[1]C)"; // B1
        String input2 = "=DIVIDE(MULTIPLY(Input!R[-1]C,Input!R[1]C),100)"; // B2
        字符串 input3 = "=Input!R[-2]C + R[-1]C"; // B3
        String input4 = "=DIVIDE(R[-2]C,Input!R[-2]C)"; // B4
        字符串输入5 = "=R[-4]C+R[-1]C"; // B5

现在,在这里我必须用适当的 B 值替换 RC。

input5 的示例,我将查看 R[-4]C,然后由于它的 input5,我将添加 (-4) 和 (5) 以获得 1,并将 R[-4]C 替换为 B1。

它对所有人都是一样的。

// 期望的输出
        // =DIVIDE(输入!B1,输入!B2)
        // =除法(乘法(输入!B1,输入!B3),100)
        // =输入!B1+计算!B2
        // =DIVIDE(calc!B2,Input!B2)
        // =calc!B1+calc!B4

谁能给我一些想法如何实现这一目标?

4

2 回答 2

1

这里有一些想法:

identify offset (1 for input1, 2 for input2 etc)
for each match of "R" ( "[" DIGIT+ "]" )? "C"
  if DIGIT+ != "" then <index> = offset + tonumber(DIGIT+) else <index> = offset
  replace match with B<index>
于 2013-02-07T18:42:03.853 回答
1

这就是想法

static String replaceB(String s, int n) {
    Matcher m = Pattern.compile("\\W(R(\\[(.+?)\\])?C)").matcher(s);
    for (; m.find(); m.reset(s)) {
        String r = "B" + (m.group(3) == null ? n : n + Integer.parseInt(m.group(3)));
        if (!r.startsWith("!")) {
            r = "calc!" + r;
        }
        s = s.replace(m.group(1), r);
    }
    return "B" + n + s;
}

public static void main(String args[]) throws Exception {
    String input1 = "=DIVIDE(Input!RC,Input!R[1]C)"; // B1
    String input2 = "=DIVIDE(MULTIPLY(Input!R[-1]C,Input!R[1]C),100)"; // B2
    String input3 = "=Input!R[-2]C + R[-1]C"; // B3
    String input4 = "=DIVIDE(R[-2]C,Input!R[-2]C)"; // B4
    String input5 = "=R[-4]C+R[-1]C"; // B5
    System.out.println(replaceB(input1, 1));
    System.out.println(replaceB(input2, 2));
    System.out.println(replaceB(input3, 3));
    System.out.println(replaceB(input4, 4));
    System.out.println(replaceB(input5, 5));
}

印刷

B1=DIVIDE(Input!B1,Input!B2)
B2=DIVIDE(MULTIPLY(Input!B1,Input!B3),100)
B3=Input!B1 + calc!B2
B4=DIVIDE(calc!B2,Input!B2)
B5=calc!B1+calc!B4
于 2013-02-07T19:24:18.263 回答