【问题标题】:convert a String[] to Arraylist<String> with java使用 java 将 String[] 转换为 Arraylist<String>
【发布时间】:2012-07-22 00:25:48
【问题描述】:

我想将从文件中获取的字符串转换为数组列表。这个方法我试过了,还是不行:

import java.io.*;
import java.util.*;

public class Data
{
    static File file = DataSaver.file;
    static List<String> data = new ArrayList<String>(512);
    public static void a() throws Exception
    {
        FileInputStream fis = new FileInputStream(file);
        DataInputStream dis = new DataInputStream(fis);
        BufferedReader reader = new BufferedReader(new InputStreamReader(dis));
        if(!file.exists())
        {
            throw new IOException("Datafile not found.");
        }
        else
        {
            String[] string = reader.readLine().split("$");
            for(int i = 0; i < string.length; i++)
            {
                data.add(string[i]);
            }
        }
        dis.close();
        System.out.println(data.toString()); //for debugging purposes.
    }
}

输出: [$testdata1$testdata2$]

想要的输出: [testdata1, testdata2]

文件内容: $testdata1$testdata2$

有人可以帮我吗?

【问题讨论】:

  • 你为什么要调用String'string'的数组?
  • 为什么不呢?你对“字符串”这个词有疑问吗?
  • 这是一个错误的变量名。 Java 可能允许它,因为它的类不区分大小写,但这在 C# 中不起作用(其中stringString 的别名)。此外,它并没有真正描述变量中包含的内容。
  • 如果你想阅读文本,请不要使用DataInputStream,它比有用更混乱。

标签: java string arraylist


【解决方案1】:

String.split 采用正则表达式,$ 是需要转义的特殊字符。此外,第一个字符是 $,因此拆分最终会得到一个空的第一个元素(您需要以某种方式将其删除,这是一种方法:

String[] string = reader.readLine().substring(1).split("\\$");

...或:

String[] string = reader.readLine().split("\\$");
for (int i = 0; i < string.length; i++)
    if (!string[i].isEmpty())
        data.add(string[i]);

【讨论】:

  • 没问题@user1546467,很高兴能帮上忙! :)
【解决方案2】:

您需要使用\\ 转义特殊字符。

如下所示更改您的拆分语句

String[] string = reader.readLine().split("\\$");

【讨论】:

    【解决方案3】:

    1.使用("\\$")去掉"$"的特殊含义。

    2. 使用Arrays.asList()Array转换为ArrayList

    来自 Java 文档:

    返回由指定数组支持的固定大小的列表。 (更改返回的列表“直写”到数组。)此方法与 Collection.toArray() 结合,充当基于数组的 API 和基于集合的 API 之间的桥梁。返回的列表是可序列化的,并实现了 RandomAccess。

    此方法还提供了一种方便的方法来创建一个固定大小的列表,该列表已初始化为包含多个元素:

    例如:

    String[] string = reader.readLine().split("\\$");
    
    ArrayList<String> arr = new ArrayList<String>(Arrays.asList(string));
    

    【讨论】:

    • @dacwe Arrays.asList() 中的列表不是由数组直接支持吗?这意味着几乎没有开销。
    【解决方案4】:

    添加到@dacwe

    String[] string = reader.readLine().substring(1).split("\\$");
    List<String> data =Arrays.asList(string);
    

    【讨论】:

    • 如果您想为他的答案做出贡献,请编辑或发表评论。
    • 好的,但是@user1546467 想要一个ArrayListasList 返回一个由数组支持的列表)。
    猜你喜欢
    • 2012-08-31
    • 2021-07-25
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多