Java 字符串解析和评估

标签 java string parsing

全部,

我正在重写或重写我不久前编写的一些代码。该代码的目标是根据以下格式的字符串计算日期和时间:

  • 日开始+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/

相关文章:

Java文本编辑器/解析框架

Java 将 ids 数组添加到 SQL Server 的准备语句中

java - java 是否有相当于 python 的 pulldom 的东西?

java - 将两个通配符 HashMap 合并为一个通配符 HashMap

c - C中字符串初始化为全 '\0'?

java - Java 中的字符串打乱顺序

c# - 将 int 转换为十六进制而不是字符串

java - 通过 ssh 到远程服务器从 Java 程序执行 Shell 脚本

parsing - Scala 解析器和隐式有序转换

json - 无法在 JavaScript 中解析 JSON 文件