如何将看起来像Array的String转换为实际的Object Array?

时间:2018-06-10 20:15:50

标签: java arrays regex string reflection

由于

public static String requestMethodExecution(String objectName, String className, String methodName, Object...
            params) {
        return String.format("%s,%s,%s,%s", objectName, className, methodName, Arrays.toString(params));
    }

返回一个String,例如,如果你愿意,可以调用这样的方法:

requestMethodExecution("foo","bar","fooBar",2.0,3.0,"Hello");

你得到一个像这样的字符串:foo,bar,fooBar,[2.0,3.0,Hello]

我很想迭代那个数组,但我不能,因为它是一个字符串。

这背后的原因是这个方法:(我刚开始反思,所以我不知道怎么做)

 public static Class[] getParameterType(String ...params) throws ClassNotFoundException {
            Class[] paramTypes = new Class[params.length];
            for(int i=0; i<params.length;i++){
                Class paramClass = Class.forName(params[i]);
                if (paramClass == Double.class) {
                    paramTypes[i] = (double.class);
                } else if (paramClass == Integer.class) {
                    paramTypes[i] = (int.class);
                } else {
                    paramTypes[i] = paramClass;
                }
            }
            return paramTypes;
    }

到目前为止,我只是提出了一个非常肮脏的方式:

 public static String[] getParams(String message){
    int indexOfParamStart = message.indexOf("[");
    int indexOfParamEnd = message.indexOf("]")+1;
    String[] splitMessage = message.substring(indexOfParamStart, indexOfParamEnd).replaceAll("\\[", "")
            .replaceAll("]", "").replaceAll(" ","").split(",");
    return splitMessage;
}

编辑:感谢您对此进行调查!由于你们中的一些人在问我想要实现的目标,这里有更多的解释:

我想实现一个简单的请求/回复协议,允许远程方法调用(我不想使用java RMI ......) 所以我会听取requestMethodExecution示例中可以看到其结构的请求。

我有我在课堂上调用Method的所有相关信息,所以要调用我需要它的方法(和它们的值),我不知道如何从给定的String访问它们。

其他很容易使用Class c = Class.forName(className);等。

编辑#2: 我的问题不是一个简单的正则表达式,为什么要关闭呢?标题已经说明了一个不同的主题,我在这里变得有点咸...

1 个答案:

答案 0 :(得分:1)

请参阅此this问题,使用RegEx从外部字符串中提取数组主体(通过方括号),然后您只需使用String.split(",")将数组主体拆分为数组项。