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

时间:2017-01-06 18:41:26

标签: java arrays string file java.util.scanner

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

  

我是一名高中生   我喜欢香蕉和鸡肉   我有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();
    }
}

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

3 个答案:

答案 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"));