【问题标题】:How to convert string text from notepad into array line by line?如何将记事本中的字符串文本逐行转换为数组?
【发布时间】:2017-05-21 14:23:27
【问题描述】:

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

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

等等..

在这种情况下,数组[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();
    }
}

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

【问题讨论】:

  • 请发布您的错误信息
  • 您可能遇到了无限循环。对吗?
  • array[1] 必须是二维的才能包含“我爱香蕉和鸡肉”。否则这将只是“I”后面的空格,即第二个字符。
  • @user8 为什么?空格是字符串中完全有效的部分。我怀疑问题出在这里:scanner.hasNextLine() 被使用了两次。需要重新初始化才能重新使用。
  • 实际上,正如 Mureinik 指出的那样,scanner.hasNextLine() 是一个无限循环,因为从未调用过 nextLine

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


【解决方案1】:

第一个循环将是无限的,因为您检查扫描仪是否有下一行,但从不推进其位置。虽然使用Scanner 很好,但看起来工作量很大,您可以让 Java 的 nio 包为您完成繁重的工作:

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

【讨论】:

    【解决方案2】:

    您只需创建一个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();
    }
    

    【讨论】:

    • 非常感谢您提供入门代码。这真的解决了我的问题。看来我的问题在于数组和列表之间缺乏理解。谢谢。
    【解决方案3】:

    由于您希望数组是动态/灵活的,因此我建议在这种情况下使用 List。一种方法-

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      相关资源
      最近更新 更多