全部,
我正在重写或重写我不久前编写的一些代码。该代码的目标是根据以下格式的字符串计算日期和时间:
- 日开始+2小时+1天-2分钟
- 现在+20天
- 月份开始+1个月
这将采取一天的开始时间(本地时间),例如2011-09-15 00:00:00 BST (2011-09-15 23:00 GMT) 然后添加 2 小时,添加 1 天,并减去 2 分钟。
该实现是用 Java 实现的,原始算法非常基础。它迭代字符串中的每个字符并附加到缓冲区。然后检查缓冲区,看看它是否以我正在查找的字符串结尾(日期说明符,例如 MINUTE、HOUR、DAYSTART 等),然后提取数字并添加到 ArrayList,其中 DateOffset 是一个带有 int 和 String 的简单类这是日期说明符。这是一些示例代码:
// hard coded for sample
String s = "DayStart+2Hour+1Day-2Minutes";
StringBuilder sbBuffer = new StringBuilder();
String buffer;
// iterate through date string
for (char c : s.toCharArray()) {
sbBuffer.append(c);
buffer = sbBuffer.toString();
// check to see the end of the buffer string is what we expect
if (buffer.endsWith("DAYSTART")) {
offsets.add(new DateOffset(0, "DAYSTART"));
sbBuffer = new StringBuilder();
} else if (buffer.endsWith("DAY") && buffer.length() > 3) {
String numberStringPart = buffer.substring(0, buffer.length() - 3);
numberStringPart = numberStringPart.replaceAll("[+]", "").trim(); // need as parseInt does not like the +.
offsets.add(new DateOffset(Integer.parseInt(numberStringPart), "DAY"));
sbBuffer = new StringBuilder();
} ... and so on ...
else {
}
}
解析字符串后,我迭代 ArrayList 来计算日期时间。
尽管我们没有遇到任何问题,但上述问题可能效率不高。它也不会检测到任何错误,因此您可以输入 DayStart+2GKGKER。
我只是想就如何重写它提出一些新鲜而简洁的想法。我做了一些正则表达式,但不太确定这是否是最好的路线。
有什么想法吗?
谢谢
安德兹
最佳答案
为您的表达式定义语法。看看ANTLR框架来帮助您构建语法并处理表达式。
关于Java 字符串解析和评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7429436/