2

在我的 JADE 程序中,一个代理需要向另一个代理发送 ACL 消息。对于发送消息的代理 (agent1),它存储一个必须发送的值的 String[] 数组。

但是,为了实际发送 ACL 消息,内容只能是字符串,不能是其他任何内容。向消息添加内容的方法如下: msg.setContent(String str)

所以问题是我有一系列值存储在 agent1 中,它们都在一个数组中。我必须在一条消息中发送这些值,所以我不能用数组的每个元素发送多条消息。在我当前的“测试”数组中,我只放置了两个元素,所以这就是我目前正在做的事情:

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

现在,当接收代理 (agent2) 打开此消息并获取内容时,它显然只是我从 agent1 发送的数组的两个元素的串联。

如何让 agent2 将这个 String 拆分回 String[] 数组?我看过方法

split(String regex)

为消息内容的字符串值。所以我在想,因为 Agent1 中数组的每个元素都以大写字母开头,那么也许我可以在遇到大写字母时输入正则表达式来拆分字符串。

但是我不确定如何做到这一点,或者这是否是一个好主意。请提供任何建议。

相关 API 文档:

http://jade.cselt.it/doc/api/jade/lang/acl/ACLMessage.html#setContent(java.lang.String )

4

3 回答 3

3

您可以使用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 提到的(逗号和一个空格),这将不起作用

于 2012-12-06T12:04:03.317 回答
2

您可以使用 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);
}
于 2012-12-06T12:23:42.433 回答
0

如果您的字符串永远不会包含“,”,那么 Abu 的答案中的解决方案将可以正常工作。

如果是这样,您需要选择其他东西作为分隔符(例如换行符 \n)。如果你不能确定任何字符永远不会出现在文本中,那么我想这是做不到的。

于 2012-12-06T12:27:49.820 回答