0

タイトルが本当にやりたいことを表しているかどうかはわかりませんが、

現在、次のように出力される情報があります

[[1/2, 1/2], 1]

ただし、形式で印刷する必要があります

{{true@1/2, false@1/2}@1}

これを行うにはどうすればよいですか。toString メソッドを設定していますが、「true@」を取得して [[ を削除する方法がわかりませんでしたが、{ を取得しました。

現在、私は持っています、

@Override
public String toString() {
    String s = "{" + this.knowledge + "}";
    return s;

どんな助けでも大歓迎です。

よろしく、

シム

4

2 に答える 2

1

この形式の文字列 (this.knowledge) にのみアクセスできると想定しています: [[str,str], str]、その場合、次の解決策が機能します。

@Override
public String toString() {
   StringBuilder strB = new StringBuilder();
    for (int i=0; i<this.knowledge.length(); i++) {
        if(this.knowledge.charAt(i)!='[' && this.knowledge.charAt(i)!=']' && this.knowledge.charAt(i)!=',') 
           strB.append(this.knowledge.charAt(i));
    }
    String[] strs = strB.toString().split("\\s+");
    return "{{true@" + strs[0] + ", false@" + strs[1]+ "}@" + strs[2] + "}";
}
于 2013-03-22T10:25:43.277 に答える
0

この回答があなたが本当にやりたいことを説明しているかどうかはわかりませんが、

あなたが持っている「情報」は、リストのリストから得られるデフォルトのプリントアウトによく似ています。私は何か「似た」ものを見ることができました:

List<String> inner = new ArrayList<String>();
inner.add("1/2");
inner.add("1/2");

List<Object> outer = new ArrayList<Object>();
outer.add(inner);
outer.add("1");

System.out.println(outer);

それが既知のコレクション (コレクションの) であると仮定するのが正しい場合knowledge、既知の要素を取得して正しい場所に配置できるフォーマット メソッドを作成できます。「true」と「false」がハードコードされたテキスト文字列の場合、次のようになります。

public String formatKnowledge(List list) {
    return "{{true@" + ((List)list.get(0)).get(0) + ", false@" + 
        ((List)list.get(0)).get(1) + "}@" + list.get(1) + "}";
}

明らかに、これは正確なタイプのリスト入力に対してのみ機能します。リストがより複雑になる可能性がある場合は、適切な場所に正しいテキスト (および中かっこ) を作成するために、より複雑なロジックが必要になります。また、「真」と「偽」が何らかの方法で計算される場合は、そのロジックも追加する必要があります。

免責事項:上記のフォーマット方法は、説明のみを目的としています。作者はクレイジーなブラインド キャストやクレイジーなブラインド インデックスの使用を容認しません...

于 2013-03-22T09:38:00.923 に答える