3

我想将从文件中获取的字符串转换为数组列表。我尝试过这种方式,但它不起作用:

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$

有人能帮我吗?

4

4 回答 4

6

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

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]);
于 2012-07-23T18:17:45.677 回答
3

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

2.用于TOArrays.asList()转换 ArrayArrayList

来自 Java 文档:

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

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

例如:

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

ArrayList<String> arr = new ArrayList<String>(Arrays.asList(string));
于 2012-07-23T18:20:58.780 回答
1

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

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

String[] string = reader.readLine().split("\\$");
于 2012-07-23T18:18:08.150 回答
0

添加到@dacwe

String[] string = reader.readLine().substring(1).split("\\$");
List<String> data =Arrays.asList(string);
于 2012-07-23T18:21:15.143 回答