Java 如何将记事本中的字符串文本逐行转换为数组?

Java 如何将记事本中的字符串文本逐行转换为数组?,java,arrays,string,file,java.util.scanner,Java,Arrays,String,File,Java.util.scanner,我是编程的初学者。我目前正在学习如何将记事本中的文本逐行转换为数组。记事本中文本的一个实例 我是一名高中生 我喜欢香蕉和鸡肉 我有两只狗和三只猫 等等 在本例中,数组[1]将是字符串“我喜欢香蕉和鸡肉”。 记事本中的行可以更新,我希望阵列是动态/灵活的。我尝试使用扫描仪来识别每一行,并尝试将它们传输到阵列中。请参阅我的代码: import java.util.*; import java.io.*; import java.util.Scanner; class Test { publ

我是编程的初学者。我目前正在学习如何将记事本中的文本逐行转换为数组。记事本中文本的一个实例

我是一名高中生
我喜欢香蕉和鸡肉
我有两只狗和三只猫

等等

在本例中,数组[1]将是字符串“我喜欢香蕉和鸡肉”。 记事本中的行可以更新,我希望阵列是动态/灵活的。我尝试使用扫描仪来识别每一行,并尝试将它们传输到阵列中。请参阅我的代码:

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();
    }
}

我不确定为什么会出现运行时错误,我尝试了另一种方法,但仍然没有产生我想要的结果。

第一个循环将是无限的,因为您检查扫描仪是否有下一行,但从不推进其位置。尽管使用
扫描器
很好,但这似乎需要做很多工作,您可以让Java的nio包为您完成繁重的工作:

String[] lines = Files.lines(Paths.get("notepad.txt")).toArray(String[]::new);

只需创建一个
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();
}
publicstaticvoidmain(字符串[]args)抛出FileNotFoundException{
扫描仪输入=新扫描仪(新文件(“notepad.txt”);
List outputList=new ArrayList();
字符串输入=null;
while(in.hasNextLine()&&null!=(input=in.nextLine()){
outputList.add(输入);
}
String[]outputArray=新字符串[outputList.size()];
outputArray=outputList.toArray(outputArray);
in.close();
}

既然您希望数组是动态的/灵活的,我建议在这种情况下使用List。这样做的一种方法-

List<String> fileLines = Files.readAllLines(Paths.get("notepad.txt"));
List fileLines=Files.readAllLines(path.get(“notepad.txt”);

请发布您的错误消息您可能遇到了无限循环。正确吗?
数组[1]
需要是二维的,才能包含“我喜欢香蕉和鸡肉”。否则这将只是“I”后面的空格,即第二个字符。@user8为什么?空格是字符串的完全有效部分。我怀疑问题就在这里:
scanner.hasNextLine()
被使用了两次。它需要重新初始化才能重新使用。实际上,正如Mureinik指出的,
scanner.hasNextLine()
是一个无限循环,因为从来没有调用过
nextLine
。非常感谢您提供的启动代码。这真的解决了我的问题。我的问题似乎在于数组和列表之间缺乏理解。谢谢