我正在使用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文件中传递的内容相匹配的任何建议都会很棒!
答案 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));