Java字符串分离

时间:2013-02-07 18:35:24

标签: java string stringbuilder stringtokenizer

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

// Inputs
        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

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

输入5的示例,我将查看R [-4] C,然后从输入5开始,我将添加(-4)和(5)得到1,我将用B1替换R [-4] C.

对所有人来说都是一样的。

// Desired output
        // =DIVIDE(Input!B1,Input!B2)
        // =DIVIDE(MULTIPLY(Input!B1,Input!B3),100)
        // =Input!B1+calc!B2
        // =DIVIDE(calc!B2,Input!B2)
        // =calc!B1+calc!B4

任何人都可以告诉我如何实现这一目标吗?

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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