如何从txt文件中解析特定值?

时间:2014-11-17 07:53:47

标签: java parsing

我正在使用Java进行分配,要求我从.txt文件中读取值,以告诉程序要执行什么。

Example:
/*
script.txt contains the following

decreaseKey(2, 35)
delete(p)
*/

// What I have tried doing so far:

int p = Integer.parseInt(inputLine.substring(7)); // doesnt work if p is larger then a single       char
int p = Integer.parseInt(inputLine.substring(12, 14)); // too specific, if value was 238792 it wouldn't work. 

我发现的棘手部分是reduceKey我需要解析2个不同的值,并且通过这样做我为int p做了两次相同的事情并将其传递给我的函数...这显然不会工作这种情况。

有关如何正确解析script.txt中的每条指令以使我的程序中的值始终与txt文件中传递的内容相匹配的任何建议都会很棒!

2 个答案:

答案 0 :(得分:0)

这将是一项工作量 - 您需要更正式地定义您正在解析的语言。

假设这是一个非常简单的语法,我首先在文件上运行Scanner并观察它发现的内容以及如何调整它以获得满足我想要的效果。

如果您需要的更复杂,请查看中间件以帮助您,例如编译有用的解析器 - cup

答案 1 :(得分:0)

我最近遇到了同样的问题,您可能会发现此代码基于正则表达式模式匹配器有用:

    final String str = "decreaseKey(2, 35)";

    final String normalized = str.replaceAll("\\s", "");
    System.out.println(normalized);

    Pattern pattern = Pattern.compile("decreaseKey\\((\\d+),(\\d+)\\)");
    Matcher matcher = pattern.matcher(normalized);
    System.out.println("matches="+matcher.matches());

    System.out.println(matcher.group(1));
    System.out.println(matcher.group(2));