Java - 使用分隔符解析文本以分隔不同的参数

时间:2012-07-31 15:31:11

标签: java regex java.util.scanner delimiter

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

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

  

MrsMarple = new Person(); MrsMarple.age = 30;

我想将此字符串分开以按顺序确定何时创建新人以及何时设置他们的年龄。我还需要知道年龄是多少。

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

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

2 个答案:

答案 0 :(得分: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()和/或其他简单工具。

答案 1 :(得分: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的教程应该是有帮助的。