0

私のクラス Main では、xml ファイルを取得して文字列に変換し、トークン化して配列リストに入れ、サブリストを使用して ArrayList 値の大部分を消去し、そのサブリストを消去しようとしています。不要なデータを削除し、必要なデータを保持できるようにします。不要なデータを消去しようとするまで、すべてうまくいきました。何が起こったかというと、最初のサブリストのクリアは機能しましたが、2 番目のサブリストのクリアは機能しませんでした。これが機能しない理由を見つけるために何時間も調査してトラブルシューティングを行いましたが、何も思いつきませんでした. それが役立つ場合、私は Web 開発者向けの Eclipse Kepler Java EE IDE を使用しています。

package mccoy.alfred.project;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) {

        try {
            URL url = new URL("http://themoneyconverter.com/rss-feed/USD/rss.xml");
            InputStream stream = url.openStream();
            BufferedInputStream buf = new BufferedInputStream(stream);
            StringBuilder sb = new StringBuilder();
            ArrayList<String> tokenList = new ArrayList<String>();
            int tokenNum = 0;

            while (true) {
                int data = buf.read();

                if (data == -1) {
                    break;
                }
                else {
                    sb.append((char)data);
                }

            }

            String xmlFile = sb.toString();
            StringTokenizer st = new StringTokenizer(xmlFile);
            System.out.println("tokens count: " + st.countTokens());

            while (st.hasMoreElements()) {
                String token = st.nextElement().toString();
                tokenList.add("Token " + tokenNum + " = " + token);
                tokenNum++;
            }

            tokenList.set(64, "Token 64 = Dirham");
            tokenList.subList(0, 56).clear();
            tokenList.subList(65, 77).clear();

            System.out.println(tokenList);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

コードの出力をコンソールに表示しますが、非常に長いです。繰り返しますが、動作しないコードの部分は次のとおりです。

tokenList.subList(0,56).clear();
tokenList.subList(65,77).clear();

また、それが役立つ場合は、サブリストを追加して、誰かがこれを修正できる場合はそれらをクリアする予定です. 長い投稿に我慢してくれてありがとう、そしてこれを手伝ってくれてありがとう!

4

2 に答える 2

2

問題は次の順序です。

tokenList.subList(0, 56).clear();
tokenList.subList(65, 77).clear();

最初の 57 個の要素を削除すると、インデックス 64 から 76 の要素がインデックス 9 から 21 に移動します。

チャンクを 2 つだけ削除する場合は、順序を入れ替えて、最初にリストの最後に触れるようにします。

tokenList.subList(65, 77).clear();
tokenList.subList(0, 56).clear();
于 2013-09-22T00:05:01.590 に答える