简而言之,我正在研究的系统有很多层。在Java中,我将获得一个包含要评估的条件的String。我将收到一个字符串,其中可能出现对名为“days(int)”的函数的函数调用。字符串可能如下所示:
1405555200 + days(4)
或
1405555200 + days(param_date)
其中第一个操作数是Unix时间戳。系统中的日期转换为Unix时间(长)。从本质上讲,字符串中的这一天(x)事物只是“将这么多天添加到时间戳”的符号。由于一天是86400秒,我们可以将此表示法简化为“将参数的86400倍添加到另一个操作数”。
我需要找到这种模式的所有出现并转向
1405555200 + days(param_date)
到
1405555200 + (86400 * param_date)
我怎样干净利落地做到这一点?
答案 0 :(得分:1)
您可以使用String#replaceAll()
:
String newString = oldString.replaceAll("days\\(([^)]+)\\)", "(86400 * $1)");
答案 1 :(得分:1)
代码实际上不需要进行乘法运算。只需要替换文本。
这应该适用于替代。
(\d+ \+ )days\(([A-Za-z_]+)\)
示例代码:
String str="1405555200 + days(param_date)";
String regex="(\\d+ \\+ )days\\(([A-Za-z_]+)\\)";
System.out.println(str.replaceAll(regex, "$1(86400 * $2)"));
输出:
1405555200 + (86400 * param_date)
答案 2 :(得分:1)
为了安全,如果括号之间的文字可以是任何内容,我会使用:
String s = "1405555200 + days(4)";
String r = s.replaceAll("days\\((.*?)\\)", "(86400 * $1)");
System.out.println(r); //=> "1405555200 + (86400 * 4)"