我有以下代码:
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]
testTable2
,metaData[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/