【问题标题】:How to convert a String which looks like an Array into an actual Object Array?如何将看起来像数组的字符串转换为实际的对象数组?
【发布时间】:2018-06-10 20:15:49
【问题描述】:

自从

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));
    }

返回一个字符串,例如,如果你想这样调用方法:

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 示例中看到其结构的请求。

我有所有相关信息可以在我的类上调用方法,所以要调用方法我需要它的参数(和它们的值),我不知道如何从给定的字符串访问它们。

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

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

【问题讨论】:

  • 你必须解析它。不过,由于您已经有一个对象数组,因此尚不清楚您实际上要解决什么问题。最终目标是什么?
  • “你已经有一个对象数组”是什么意思。我如何迭代该数组/访问它。对我来说,我似乎只有一个看起来像对象数组的字符串
  • 如果您的输入包含一个带有, 的字符串怎么办?它会是什么样子?
  • 这是一个很好的问题,但我不知道该如何处理。
  • @InDaPond 你不能使用一些众所周知的语法,比如 JSON 吗?

标签: java arrays regex string reflection


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-10-17
    • 2012-02-18
    • 2015-12-31
    • 2022-10-07
    • 1970-01-01
    • 2011-12-27
    • 2023-03-28
    • 2016-08-16
    • 2021-05-09
    相关资源
    最近更新 更多