2

私のJADEプログラムでは、あるエージェントが別のエージェントにACLメッセージを送信する必要があります。メッセージを送信するエージェント(agent1)の場合、送信する必要のある値のString[]配列を格納します。

ただし、ACLメッセージを実際に送信するには、コンテンツは文字列のみである必要があります。メッセージにコンテンツを追加するために使用される方法は次のとおりです。 msg.setContent(String str)

したがって、問題は、agent1に格納されている値の範囲があり、それらはすべて配列に含まれていることです。配列の各要素で複数のメッセージを送信できないように、これらの値を1つのメッセージで送信する必要があります。現在の「テスト」配列では、2つの要素しか配置していないため、これまでに行っていることは次のとおりです。

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

これで、受信エージェント(agent2)がこのメッセージを開いてコンテンツを取得すると、明らかに、agent1から送信した配列の2つの要素を連結したものになります。

agent2にこの1つの文字列を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.Arraysjavadoc

注:,@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

アブの答えの解決策は、文字列に「、」が含まれない場合は問題なく機能します。

その場合は、区切り文字として別​​のものを選択する必要があります(たとえば、改行\ n)。テキストに表示されない文字について確信が持てない場合は、それができないと思います。

于 2012-12-06T12:27:49.820 に答える