Как преобразовать строку, которая выглядит как массив, в реальный массив объектов? - PullRequest
0 голосов
/ 10 июня 2018

Так как

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

Редактировать: Спасибо за внимание!Так как некоторые из вас спрашивают, чего я пытаюсь достичь, вот немного больше объяснений:

Я хочу реализовать простой протокол запроса / ответа, который позволяет удаленный вызов метода (и я не хочу использовать JavaRMI ...) Поэтому я слушаю запросы, структуру которых можно увидеть в примере requestMethodExecution.

Там у меня есть вся необходимая информация для вызова метода в моем классе, поэтому для вызова нужного мне методаэто аргументы (и их значение), и я не знаю, как получить к ним доступ из заданной строки.

Остальные легко получить с помощью Class c = Class.forName (className);и т.д ..

Редактировать # 2: Мой вопрос не о простом регулярном выражении, так зачем его закрывать?В заголовке уже указана другая тема, здесь я становлюсь немного соленым ...

1 Ответ

0 голосов
/ 10 июня 2018

См. Этот этот вопрос об использовании RegEx для извлечения тела массива из внешней строки (в квадратных скобках), а затем вы можете просто использовать String.split(","), чтобы разбить тело массива на элементы массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...