2

目的の出力を取得しようとして立ち往生しています。実際には、別の問題で直面している文字列分離の問題です。

// 入力
        String input1 = "=DIVIDE(入力!RC,入力!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

ここで、RC を適切な B 値に置き換える必要があります。

入力 5 の例では、R[-4]C を見て、その入力 5 から (-4) と (5) を加算して 1 を取得し、R[-4]C を B1 に置き換えます。

それはすべて同じになるでしょう。

// 必要な出力
        // =DIVIDE(入力!B1,入力!B2)
        // =DIVIDE(MULTIPLY(入力!B1,入力!B3),100)
        // =入力!B1+計算!B2
        // =DIVIDE(calc!B2,Input!B2)
        // =計算!B1+計算!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 に答える