【问题标题】:Read txt and save into array,java读取txt并保存到数组中,java
【发布时间】:2013-08-18 00:24:53
【问题描述】:

在 java 中读取文件并将每个元素保存到 2 个数组中时遇到一些问题。 我的txt是这样写的

2,3
5
4
2
3
1

其中第一行是两个数组 A=2 和 B=3 的长度,然后是每个数组的元素。我不知道如何将它们保存到 A 和 B 中并用它们的长度初始化数组。 最后每个数组将是 A=[5,4] B=[2,3,1]

public static void main(String args[])
      {
        try{
// Open the file that is the first 
// command line parameter

            FileInputStream fstream = new FileInputStream("prova.txt");
            BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
            String strLine;
//Read File Line By Line
            while ((strLine = br.readLine()) != " ")   {
                String[] delims = strLine.split(",");
                String m = delims[0];
                String n = delims[1];
                System.out.println("First word: "+m);
                System.out.println("First word: "+n);
            }
//Close the input stream
            in.close();
            }catch (Exception e){//Catch exception if any
                System.err.println("Error: " + e.getMessage());
                }
        }
    }

这是我做的..我使用 System.out.println....只是在控制台中打印没有必要...有人可以帮助我,给我一些建议吗? 提前谢谢

【问题讨论】:

  • Don't compare strings with == or != 改为使用equals() 方法。
  • @Pshemo:是的,我在发布此消息后看到了。他甚至不应该对此进行检查,也不应该在他的代码中使用 while 循环,而应该使用 for 循环,因为他会知道他应该在循环之前循环多少次。
  • 致原发帖人​​:解决大多数编程问题的关键是将大问题分解为小步骤,然后尝试一次解决每个小步骤。同样,您的代码根本不应包含任何 while 循环,而应包含 for 循环,因为您将知道要在每个循环 before 循环多少次。您还需要在 finally 块中关闭 BufferedReader。

标签: java bufferedreader


【解决方案1】:

再次,将大问题分解成小步骤,解决每一步。

  1. 阅读第一行。
  2. 解析第一行以获得 2 个数组的大小。
  3. 创建数组。
  4. 循环第一个数组长度次并填充第一个数组。
  5. 循环第二个数组长度次并填充第二个数组。
  6. 在 finally 块中关闭 BufferedReader(确保在 try 块之前声明它)。
  7. 显示结果。

【讨论】:

  • +1 我喜欢家庭作业的一般答案,尤其是那些没有代码的答案:)
【解决方案2】:

将此答案与@Hovercraft 的答案中概述的步骤相匹配

String strLine = br.readLine(); // step 1

if (strLine != null) {
  String[] delims = strLine.split(","); // step 2

  // step 3
  int[] a = new int[Integer.parseInt(delims[0])];
  int[] b = new int[Integer.parseInt(delims[1])];

  // step 4
  for (int i=0; i < a.length; i++)
    a[i] = Integer.parseInt(br.readLine());

  // step 5
  for (int i=0; i < b.length; i++)
    b[i] = Integer.parseInt(br.readLine());

  br.close(); // step 6

  // step 7
  System.out.println(Arrays.toString(a));
  System.out.println(Arrays.toString(b));
}

注意,我打电话给br.close()。使用in.close(),您只关闭了内部流,而BufferedReader 仍然打开。但是关闭外部包装流会自动关闭 所有 包装的内部流。请注意,像这样的清理代码应该始终放在 finally 块中。

此外,链中不需要DataInputStreamInputStreamReader。只需将BufferedReader 直接包裹在FileReader 周围即可。

如果所有这些课程都让你有点困惑;请记住Stream 类用于字节级别的读取,Reader 类用于字符级别的读取。所以,这里只需要Readers。

【讨论】:

  • 令人印象深刻的代码。但是让 OP 发现他自己令人印象深刻的代码不是更好吗?通过给他一个勺子式的答案,你可以从编码中获得乐趣、兴奋和学习。
  • 如果您愿意,请务必对我的stackoverflow.com/questions/11335203/… 问题投反对票,代表对我来说并不重要,或者更好的是,请在此处的评论中解决我的担忧,说明您为什么决定用勺子喂OP 以及你希望他能从中获得什么。
  • 请检查我刚刚给你的 +5。 (+4/-1)
  • 谢谢,但请再次解决我的疑虑,以便我可以取消对此答案的反对票。给原发帖人提建议,让他们自己写代码不是更好吗?我们还没有看到他对我的回答的回复,看看他可以先为自己做些什么。
猜你喜欢
  • 2012-11-06
  • 2013-10-05
  • 1970-01-01
  • 2015-07-23
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-22
相关资源
最近更新 更多