如何使用split将文件中的值添加到数组中?

时间:2016-04-19 22:16:56

标签: 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运行时,我得{{1}在} testtable2testtable2testtable2我会得到1NameageID

为了获得我想要的结果,有什么想法要做什么?

3 个答案:

答案 0 :(得分:3)

只需打印#include <iostream> #include <string> using namespace std; bool isA_Vowel(string s); string remov(string s); int main() { string s; string ans = "y"; while((ans == "Y") || (ans == "y")) { cout << "Please enter a word or a series of letters: "; cin >> s; cout << "Old: " << s << endl; cout << "New: " << remov(s) << endl; cout << "Would you like to go again? <y/n> "; cin >> ans; } } bool isA_Vowel (string s) { if (s == "a" || s == "e"|| s == "i" || s == "o" || s == "u" || s == "A" || s == "E" || s == "I" || s == "O" || s == "U") { return (true); } else { return (false); } } string remov(string s) { for (unsigned int i = 0; i < s.length(); ++i) { if (isA_Vowel(s)) { s.erase(i,1); } } return(s); } 而不是metaData[i],然后将每个字符串拆分为metaData[0](即“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]

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

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

最后,有最直接的方式:

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

答案 1 :(得分:0)

在for循环内的行后面修改你的代码,

System.out.println(metaData[0]);

作为

System.out.println(metaData[i]);

答案 2 :(得分:0)

虽然我的回答可能不完全适合您的问题。但正如我所看到的,您的文件格式是TSV或CSV。 您可以考虑使用 OpenCSV 为了你的问题。

图书馆将为您处理阅读,分割过程。