我是编程的初学者。我目前正在学习如何逐行将文本从记事本转换为数组。记事本中文本的一个实例,
我是一名高中生 我喜欢香蕉和鸡肉 我有2只狗和3只猫
依旧......
在这种情况下,数组[1]将是字符串'I love banana and chicken'。 记事本中的行可以更新,我希望数组是动态/灵活的。我曾尝试使用扫描仪识别每一行并尝试将它们传输到阵列。请参考我的代码:
import java.util.*;
import java.io.*;
import java.util.Scanner;
class Test
{
public static void main(String[] args)
throws Exception
{
File file = new File("notepad.txt");
Scanner scanner = new Scanner(file);
String line;
int i = 0;
int j = 0;
while (scanner.hasNextLine()) {
i++;
}
String[] stringArray = new String[i];
while (scanner.hasNextLine()) {
line = scanner.nextLine();
stringArray[j] = line;
j++;
}
System.out.println(stringArray[2]);
scanner.close();
}
}
我不确定为什么会出现运行时错误,我尝试了另一种方法,但仍然没有产生我想要的结果。
答案 0 :(得分:3)
第一个循环将是无限的,因为您检查扫描仪是否有下一行,但从不提前其位置。虽然使用Scanner
很好,但看起来很多工作,你可以让Java的nio包为你做繁重的工作:
String[] lines = Files.lines(Paths.get("notepad.txt")).toArray(String[]::new);
答案 1 :(得分:1)
您可以通过创建ArrayList
然后将其转换为字符串数组来完成。
以下是一个示例代码,可帮助您入门:
public static void main(String[] args) throws FileNotFoundException {
Scanner in = new Scanner(new File("notepad.txt"));
List<String> outputList = new ArrayList<>();
String input = null;
while (in.hasNextLine() && null != (input = in.nextLine())) {
outputList.add(input);
}
String[] outputArray = new String[outputList.size()];
outputArray = outputList.toArray(outputArray);
in.close();
}
答案 2 :(得分:0)
由于您希望数组是动态/灵活的,我建议在这种情况下使用List。一种方法 -
List<String> fileLines = Files.readAllLines(Paths.get("notepad.txt"));