0

您将如何使用多个定界符或单个定界符来检测和分离不同的字符串匹配?

例如,我使用 aScanner来解析以下字符串:

MrsMarple=新人();MrsMarple.age=30;

我想分离出这个字符串,依次确定何时创建一个新人以及何时设置他们的年龄。我还需要知道设置的年龄。

这些参数之间和/或任何一方都可以有任何内容(它们之间不一定必须有空格,但分号是必需的)。“MrsMarple”可以是任何词。我还希望忽略同一行上“//”(两个斜杠)之后的任何参数,但这是可选的。

如果您能想到使用正则表达式的简单替代方法,我非常愿意考虑它。

4

2 回答 2

2

我可能会尝试一个简单的拆分/循环方法。

给定String input = "MrsMarple=new Person(); MrsMarple.age=30;"

String[] noComments = input.split("//");
String[] statements = input.split(noComments[0]);
for(String statement: statements) {
    String[] varValue = statement.split("=");
    ...
    // Additional MrsMarple-SmartSense Technology (tm) here...
    ...
}

明智地使用String.trim()和/或其他简单的工具。

于 2012-07-31T15:45:25.570 回答
2

或者为了使问题更笼统(并且没有正则表达式),您可以尝试编写脚本(因为它看起来像脚本语言语法):http: //java.sun.com/developer/technicalArticles/J2SE/Desktop/scripting/。例子:

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
String input = "MrsMarple=new Person(); MrsMarple.age=30;"
try {
  jsEngine.eval(input);
} catch (ScriptException ex) {
    ex.printStackTrace();
}

在这种情况下,您将需要一个名为 Person 的 Java 类以及名为 age 的公共字段。以上代码未经测试,您可能需要添加类似

jsEngine.eval("importPackage(my.package);");

让它工作。无论如何,Oracle 的教程应该会有所帮助。

于 2012-07-31T16:30:05.913 回答