【问题标题】:Loading a large of amounts of strings into my ArrayList, I dont want to clog up my class将大量字符串加载到我的 ArrayList 中,我不想堵塞我的班级
【发布时间】:2010-11-27 08:06:13
【问题描述】:

我有一个 ArrayList,我想在其中放入很多字符串(数百个),但我不想围绕大量 .add() 等进行编码。我可以将我的 strings.xml 文件中的字符串重要到 ArrayList 中吗?如果有,怎么做?

【问题讨论】:

  • 使用 .add() 有什么问题?也许一个代码示例会有所帮助。
  • 在技术上使用 .add() 没有任何问题。它做我想做的一切。但是有一个缺点。我想添加几百个单词,我会处理一个巨大的列表。如果我仍在添加或调整代码,我不想为了做到这一点而上下滚动几百行 .add()。
  • 上下滚动 ArrayList 是什么意思?我没有看到将 100Ks 单词添加到列表中的问题。
  • 滚动的意思是我必须一个一个地输入它们吗?这意味着我有数百行添加的单词。如果我在这数百行代码的上方或下方有任何其他代码,我必须将代码窗口上下滚动很远。这更多的是关于代码的可读性。如果我从另一个文件中调用单词,我不必处理查看它们。我想我之前可能不清楚。

标签: java android string arraylist


【解决方案1】:

如果您将值保存在 strings.xml 文件中,您可以这样做:

ArrayList<String> values = new ArrayList<String>();
Collections.addAll(values, getResources.getStringArray(R.array.words));

List<String> values = Arrays.asList(getResources.getStringArray(R.array.words));

【讨论】:

    【解决方案2】:

    这是一个从项目的资产目录中读取“words.txt”文件的示例。每个单词单独一行。

        /*
         *  If you know the number of words at compile time, 
         * specify it here in the initial capacity
         */
        ArrayList<String> words = new ArrayList<String>(50);  
        try {
            InputStream is = getResources().getAssets().open("words.txt");
    
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String line;
    
            while((line = br.readLine()) != null)
            {
                words.add(line);
            }
    
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    

    【讨论】:

      【解决方案3】:

      将 100 个字符串放入一个文件并从中读取。使用 for 循环进行迭代以添加这些字符串。如果您不想使用文件,用户 String[] words = new String[]{"test","me"..."last word"} 然后迭代在它上面。

      【讨论】:

      • 如果我的字符串在 StringArray 中(在我的 strings.xml 中)并且我创建了一个 ArrayList,我可以通过 For Each 循环运行 StringArray 并且很好,对吧?
      【解决方案4】:

      如果您有数千个单词,可能将它们放入 txt 文件是一个很好的解决方案。但是,如果单词的数量不是很多,您可以再做一件事来避免多次调用 add():

      String[] myArray = {"stack", "oveflow", "java", "array",...}; //包含大量字符串的大数组。

      列表列表 = Arrays.asList(myArray);

      【讨论】:

        【解决方案5】:

        如果 xml 文件是某种特定格式,您也可以使用 dom4j 轻松读取它们

        例如:

        <?xml version="1.0" encoding="UTF-8"?>
        <Root>
            <Address studentId="1001">
                <Details name="Sam" age="" sex="M" class="10" />
            </Address>
            <Address studentId="1002">
                <Details name="Krish" age="" sex="M" class="10" />
            </Address>
        </Root>
        

        您可以阅读以下代码:

        String xmlFileName = "D:/validation/validator/src/summa/sample.xml";
          String xPath = "//Root/Address";
          Document document = getDocument( xmlFileName );
          List<Node> nodes = document.selectNodes( xPath );
          for (Node node : nodes)
          {
             String studentId = node.valueOf( "@studentId" );
             stringArray.add( studentId );
          }
        

        【讨论】:

        • 如果那是唯一的用途,我同意...但通常当您从 xml 开始时,您会在很多地方完成使用它。而且 dom4j 相当轻量级...
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-11
        • 1970-01-01
        • 2010-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多