Конвертировать из 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:
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). Если вы не можете быть уверены в том, что какой-либо персонаж никогда не появится в тексте, тогда, я думаю, это невозможно сделать.