java - Java 中的 StdIn/Out 如何工作?

标签 java stdout stdin

我是 Java 新手,正在尝试运行 QuickUnion 算法。 我的桌面上有这些文本文件,并且想要编程来读取其中的整数。 QuickUnion 类到此结束。

 public static void main(String[] args) {

    int N = StdIn.readInt();    // Read number of sites
    QuickUnionUF quickunion = new QuickUnionUF(N);
    while (!StdIn.isEmpty()) {
        int p = StdIn.readInt();
        int q = StdIn.readInt();                     // Read pair to connect
        if (quickunion.connected(p, q)) continue;     // Ignore if connected
        quickunion.union(p, q);                       // Combine components
        StdOut.println(p + " " + q);                 // and print connection
    }
    StdOut.println(quickunion.count() + " components");
}

我的问题是:StdIn 是如何工作的?如何读取文本文件?第一个测试文件包含两列数字。

最佳答案

Std 库不提供从任意文件读取所需的功能。其目的是为初学者(学生)提供一种简单的方法来编写读取和写入标准输入/标准输出的简单程序。它的功能有限1

相比之下,生产代码使用标准的System.inSystem.out,要么直接使用,要么(在System.in的情况下) >) 通过 Scanner 类。因此,要从生产代码中的文件(或标准输入)读取文本,您通常会执行以下操作:

Scanner in = new Scanner(new File("/some/path/to/file.txt"));

Scanner in = new Scanner(System.in);

然后使用各种Scanner方法来读取行或单个项目。

(您还可以使用 ReaderBufferedReader API,并以各种方式自行解析输入行。或者使用现有的解析器库来读取 CSV 文件、JSON文件、XML 文件等。)

你的例子看起来像这样:

import java.util.Scanner;
...
public static void main(String[] args) {
    Scanner in = new Scanner(System.in);  // replace as required!
    int n = in.nextInt();    // Read number of sites
    QuickUnionUF quickUnion = new QuickUnionUF(n);
    while (in.hasNextInt()) {
        int p = in.nextInt();
        int q = in.nextInt();                     // Read pair to connect
        if (quickUnion.connected(p, q)) continue; // Ignore if connected
        quickUnion.union(p, q);                   // Combine components
        System.out.println(p + " " + q);          // and print connection
    }
    System.out.println(quickUnion.count() + " components");
}

请注意,new Scanner(new File(someString)) 被声明为抛出 FileNotFoundException,您的代码必须处理该异常。

<小时/>

1 - 我的建议是尽快停止使用 StdInStdOut 和其余内容。学习使用标准 API 并进行切换。

关于java - Java 中的 StdIn/Out 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37224120/

相关文章:

java - 如何在 Spring 中实现 GraphQL 的异常处理程序

java - RMI - 客户端如何获取服务器控制台输出?

python - 以与 python2 和 python3 兼容的方式将字节写入标准输出

linux - 进程的管道 pid 到文件

java - 在具有嵌入式 Tomcat 的 jar 上提供额外的类路径

erlang - 在 Erlang 的标准输出中写入输出行

c++ - stdin/stdout/stderr 上的跨平台 (linux/Win32) 非阻塞 C++ IO

c# - 如何使用 sendmessage(C#) 向 cmd.exe 发送退格键

c - C中多个子进程之间的管道示例

java - Spring 测试 DBunit 警告