java - 如何使用拆分将文件中的值添加到数组中?

标签 java string file split bufferedreader

我有以下代码:

BufferedReader metaRead = new BufferedReader(new FileReader(metaFile));
String metaLine = "";
String [] metaData = new String [100000];

while ((metaLine = metaRead.readLine()) != null){
    metaData = metaLine.split(",");
    for (int i = 0; i < metaData.length; i++)
        System.out.println(metaData[0]);
}

这是文件中的内容:

testTable2  Name    java.lang.Integer   TRUE    test
testTable2  age     java.lang.String    FALSE   test
testTable2  ID      java.lang.Integer   FALSE   test

我希望数组位于 metaData[0] testTable2metaData[1] 将是 Name,但是当我在 0 运行它时,我得到 testtable2testtable2testtable2,在 1 我会得到 NameageID越界异常

有什么想法可以得到我想要的结果吗?

最佳答案

只需打印 metaData[i] 而不是 metaData[0] 并将每个字符串拆分为 "[ ]+" (这意味着 < em>"1个或多个空格"):

metaData = metaLine.split("[ ]+");

结果,您将获得以下数组:

[testTable2, Name, java.lang.Integer, TRUE, test]
[testTable2, age, java.lang.String, FALSE, test]
[testTable2, ID, java.lang.Integer, FALSE, test]

上述输出结果的代码片段:

while ((metaLine = metaRead.readLine()) != null) {
    metaData = metaLine.split("[ ]+");
    for (int i = 0; i < metaData.length; i++)
        System.out.print(metaData[i] + " ");
    System.out.println();
}

此外,我已经使用 Java 8 和 Stream API 编写了您的任务:

List<String> collect = metaRead
            .lines()
            .flatMap(line -> Arrays.stream(line.split("[ ]+")))
            .collect(Collectors.toList());

最后,还有最直接的方法:

final int LINES, WORDS;
String[] metaData = new String[LINES = 5 * (WORDS = 3)]; // I don't like it

int i = 0;
while ((metaLine = metaRead.readLine()) != null) {
    for (String s : metaLine.split("[ ]+")) metaData[i++] = s;
}

关于java - 如何使用拆分将文件中的值添加到数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36730468/

相关文章:

java - java字符串中的立方根符号

java - 从 yaml Autowiring springboot 中的 json 值

python - 将文本文件解析为表格数据进行处理

java - 从字符串获取资源

java - java中有YYYYWW格式吗

JavaScript 正则表达式提取特定单词后面引号之间的所有字符

git - 是否可以(在 git 中)保留上次更改文件时的信息?

python - 将文件解析为python中的字典

JavaScript - 更新变量以不断更改文件内容

java - 使用 f :ajax to wait for data to finish processing, 然后更新