我试图获得所需的输出。它实际上是我在另一个问题中遇到的字符串分离问题。
// 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
任何人都可以告诉我如何实现这一目标吗?
答案 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