java - 为什么我无法清除 ArrayList 的两个子列表

标签 java xml eclipse arraylist sublist

在我的类(class) Main 中,我尝试获取一个 xml 文件,将其转换为字符串,对其进行标记并将其放入数组列表中,然后使用子列表清除大部分 ArrayList 值,然后清除该子列表,以便我可以删除不需要的数据并保留我需要的数据。一切都运行良好,直到我尝试清除不需要的数据。发生的情况是,第一个子列表清除工作正常,但第二个子列表清除工作失败。我花了几个小时进行研究和故障排除,以找出为什么这不起作用,但我没有想出任何办法。如果有帮助的话,我正在使用面向 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();

此外,如果有帮助,我计划添加更多子列表并清除它们(如果有人可以解决此问题)。感谢您忍受这么长的帖子,并提前感谢您帮助我!

最佳答案

问题是顺序:

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

您删除了前 57 个元素,索引 64 到 76 处的元素现在位于索引 9 到 21 中。

如果您只想删除两个 block ,只需交换顺序,以便先触摸列表的末尾。

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

关于java - 为什么我无法清除 ArrayList 的两个子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18938919/

相关文章:

java - Java 中的母版页 - JDK 1.6

java - Microsoft Graph API Java HTTP 客户端不允许通过补丁更新

java - 将泛型值添加到未知类型的泛型容器

php - 从 SQL 查询创建 XML 文件

Android - 填充不随图层列表中的状态而改变

eclipse - 哪里可以下载jetty源码?

javascript - 如何在JSP中使用REST Api?

xml - 如何从 XML 元素中获取文本(结构标签)?

Android - 复选框下拉菜单

java - 将 eclipse 插件 View 与文件扩展名关联