Java将方法字符串拆分为方法名称和参数

时间:2015-08-03 00:14:20

标签: java arrays regex string

我正在为我正在制作的游戏编写一种小编程语言,这种语言将允许用户为内部游戏代码之外的向导实体定义自己的法术。我写下了语言,但我不完全确定如何更改字符串

ls

进入一个数组,其中包含方法名称和后面的参数,如

.

我怎么能用java的String.split或string regex?来做到这一点? 提前谢谢。

4 个答案:

答案 0 :(得分:1)

由于您只对函数名称和参数感兴趣,因此我建议扫描到params的第一个实例(然后是最后一个),如上所述。

String input = "setSpellName(\"Fireball\")";
String functionName = input.substring(0, input.indexOf('('));
String[] params = input.substring(input.indexOf(')'), input.length - 1).split(",");

答案 1 :(得分:0)

捕捉字符串

setSpellName("Fireball")

做这样的事情:

String[] line = argument.split("(");

获取你" setSpellName"在第[0]行和#34;火球")第[1]行

摆脱像这样的最后一个括号

line[1].replaceAll(")", " ").trim();

使用两个"清理"构建您的JSON。字符串。

对于Regex来说,这可能是更好的方法,但这是快速而肮脏的方式。

答案 2 :(得分:0)

使用String.indexOf()String.substring(),您可以解析函数和参数。一旦解析出来,请在每个引号周围应用引号。然后将它们全部组合在一起,用逗号分隔,用大括号括起来。

public static void main(String[] args) throws Exception {
    List<String> commands = new ArrayList() {{
        add("setSpellName(\"Fireball\")");
        add("setSplashDamage(32,5)");
    }};

    for (String command : commands) {
        int openParen = command.indexOf("(");
        String function = String.format("\"%s\"", command.substring(0, openParen));
        String[] parameters = command.substring(openParen + 1, command.indexOf(")")).split(",");

        for (int i = 0; i < parameters.length; i++) {
            // Surround parameter with double quotes
            if (!parameters[i].startsWith("\"")) {
                parameters[i] = String.format("\"%s\"", parameters[i]);
            }
        }

        String combine = String.format("{%s,%s}", function, String.join(",", parameters));
        System.out.println(combine);
    }
}

结果:

{"setSpellName","Fireball"}
{"setSplashDamage","32","5"}

答案 3 :(得分:0)

这是使用正则表达式的解决方案,请使用此正则表达式"([\\w]+)\\(\"?([\\w]+)\"?\\)"

    String input = "setSpellName(\"Fireball\")";
    String pattern = "([\\w]+)\\(\"?([\\w]+)\"?\\)";

    Pattern r = Pattern.compile(pattern);
    String[] matches;
    Matcher m = r.matcher(input);
    if (m.find()) {
        System.out.println("Found value: " + m.group(1));
        System.out.println("Found value: " + m.group(2));

        String[] params = m.group(2).split(",");
        if (params.length > 1) {
            matches = new String[params.length + 1];
            matches[0] = m.group(1);
            System.out.println(params.length);
            for (int i = 0; i < params.length; i++) {
                matches[i + 1] = params[i];
            }
            System.out.println(String.join(" :: ", matches));
        } else {
            matches = new String[2];
            matches[0] = m.group(1);
            matches[1] = m.group(2);
            System.out.println(String.join(", ", matches));
        }
    }
  

([\\w]+)是第一个获取函数名称的组。

     

\\(\"?([\\w]+)\"?\\)是获取参数的第二组。

这是 a Working DEMO