Конвертировать из String[] в String и снова в String[]

В моей программе JADE один агент должен отправить сообщение ACL другому агенту. Для агента, отправляющего сообщение (agent1), он хранит массив значений String[], которые он должен отправить.

Однако для того, чтобы фактически отправить сообщение ACL, содержимое должно быть только строкой и ничем иным. Используемый метод добавления содержимого к сообщению следующий: msg.setContent(String str)

Так что проблема в том, что у меня есть диапазон значений, хранящихся в agent1, которые находятся в массиве. Я должен отправить эти значения в одном сообщении, поэтому я не могу отправить несколько сообщений с каждым элементом массива. В моем текущем массиве "Test" я поместил только два элемента, так что я делаю это до сих пор:

msg.setContent(theArray[0] + theArray[1]);

Теперь, когда агент-получатель (agent2) открывает это сообщение и получает содержимое, это, очевидно, просто объединение двух элементов массива, который я отправил из agent1.

Как мне заставить agent2 разделить эту строку на массив String[]? Я посмотрел на метод

split(String regex)

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

Однако я не уверен, как это сделать, или если это даже хорошая идея. Пожалуйста, предоставьте любые предложения.

Соответствующий документ API:

http://jade.cselt.it/doc/api/jade/lang/acl/ACLMessage.html)

3 ответа

Решение

Вы можете использовать JSON в качестве формата обмена, чтобы отправлять практически все в виде строк по проводам.

Вот пример использования org.json.

Collection c = Arrays.asList(str);
org.json.JSonArray arr = new org.json.JSonArray(c);
msg.sendContents(arr.toString());

На другой стороне:

String s = getContents();
org.json.JSonArray arr = new org.json.JSonArray(s);
String[] strs = new String[arr.length()];
for (int i = 0; i < arr.length(); i++) {
    strs[i] = arr.getString(i);
}

Ты можешь использовать java.util.Arrays класс для преобразования массива в строку

Подобно:

String [] myArray = new String[3];
array[0] = "Abc";
array[1] = "Def";
array[2] = "Xyz";
String s =java.util.Arrays.toString(myArray);

Так что теперь s будет иметь строку [Abc, Def, Xyz]

Теперь для преобразования обратно из строки в массив строк,

все, что вам нужно сделать, это удалить те [ а также ] сначала (получить подстроку), а затем разделить строку.

String myString = s.substring(1, s.length()-1);
String arrayFromString[] = myString.split(", ");

Перейдите по этой ссылке java.util.Arrays javadoc

Примечание: это не будет работать, если ваши строки содержат , (запятая и один пробел), как упомянуто @jlordo

Решение в ответе Абу будет работать нормально, если ваши строки никогда не будут содержать ", ".

Если это так, вам нужно выбрать что-то еще в качестве разделителя (например, символ новой строки \n). Если вы не можете быть уверены в том, что какой-либо персонаж никогда не появится в тексте, тогда, я думаю, это невозможно сделать.

Другие вопросы по тегам