Java:如何从System.console()获取输入

sat*_*oid 155 java

我试图使用Console类来获取用户的输入,但是当我调用时会返回一个null对象System.console().在使用System.console之前,我是否必须更改任何内容?

Console co=System.console();
System.out.println(co);
try{
    String s=co.readLine();
}
Run Code Online (Sandbox Code Playgroud)

ath*_*spk 233

使用Console读取输入(仅在IDE外部可用):

System.out.print("Enter something:");
String input = System.console().readLine();
Run Code Online (Sandbox Code Playgroud)

另一种方式(无处不在):

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {
    public static void main(String[] args) throws IOException { 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Enter String");
        String s = br.readLine();
        System.out.print("Enter Integer:");
        try {
            int i = Integer.parseInt(br.readLine());
        } catch(NumberFormatException nfe) {
            System.err.println("Invalid Format!");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

System.console()在IDE中返回null,
因此如果您确实需要使用System.console(),请从McDowell中读取此解决方案.

  • 得到答案:使用BufferedInputStream,该方法委托给重载的read()方法,该方法读取8192个字节并缓冲它们直到需要它们.它仍然只返回单个字节(但保留其他字节).这样,BufferedInputStream对操作系统的本机调用较少,无法从文件中读取.谢谢 (2认同)

小智 113

Scanner in = new Scanner(System.in);

int i = in.nextInt();
String s = in.next();
Run Code Online (Sandbox Code Playgroud)

  • @Yokhen你能不能给出一个例子,其中`in.nextLine()`会产生问题? (9认同)
  • 然而``nextLine()`非常混乱.在试图从控制台获取整条线路时,它会让你头疼. (4认同)
  • (1)默认情况下,Scanner的定界符为空格,因此当用户输入多个文本时,它将导致软件继续进行下几个next()操作,并且我们软件中的逻辑错误。(2)如果我使用nextLine()读取包括空格和\ n \ r在内的整个句子,则需要trim()用户输入。(3)next()将等待用户输入,但nextLine()不会。(4)我测试了useDelimiter(“ \\ r \\ n”),但它导致我们其他地方的软件中的next()逻辑再次出错。结论,使用Scanner读取用户输入确实非常混乱。BufferedReader是最好的。 (2认同)

小智 35

从控制台/键盘读取输入字符串的方法很少.以下示例代码显示如何使用Java从控制台/键盘读取字符串.

public class ConsoleReadingDemo {

public static void main(String[] args) {

    // ====
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Please enter user name : ");
    String username = null;
    try {
        username = reader.readLine();
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println("You entered : " + username);

    // ===== In Java 5, Java.util,Scanner is used for this purpose.
    Scanner in = new Scanner(System.in);
    System.out.print("Please enter user name : ");
    username = in.nextLine();      
    System.out.println("You entered : " + username);


    // ====== Java 6
    Console console = System.console();
    username = console.readLine("Please enter user name : ");   
    System.out.println("You entered : " + username);

}
}
Run Code Online (Sandbox Code Playgroud)

代码的最后一部分使用了java.io.Console类.System.console()在通过Eclipse运行演示代码时,无法获取Console实例.因为eclipse将您的应用程序作为后台进程运行,而不是作为具有系统控制台的顶级进程运行.


Jon*_*eet 17

这取决于您的环境.javaw例如,如果您正在运行Swing UI ,则无法显示控制台.如果您在IDE中运行,它将在很大程度上取决于特定IDE对控制台IO的处理.

从命令行来看,它应该没问题.样品:

import java.io.Console;

public class Test {

    public static void main(String[] args) throws Exception {
        Console console = System.console();
        if (console == null) {
            System.out.println("Unable to fetch console");
            return;
        }
        String line = console.readLine();
        console.printf("I saw this line: %s", line);
    }
}
Run Code Online (Sandbox Code Playgroud)

运行这个只是java:

> javac Test.java
> java Test
Foo  <---- entered by the user
I saw this line: Foo    <---- program output
Run Code Online (Sandbox Code Playgroud)

另一个选择是使用System.in,您可能想要包装在BufferedReader读取行中,或使用Scanner(再次包装System.in).


akh*_*uri 7

在这里找到一些关于从控制台读取的好答案,这里使用"扫描仪"从控制台读取的另一种方式:

import java.util.Scanner;
String data;

Scanner scanInput = new Scanner(System.in);
data= scanInput.nextLine();

scanInput.close();            
System.out.println(data);
Run Code Online (Sandbox Code Playgroud)


小智 5

尝试这个。希望这会有所帮助。

    String cls0;
    String cls1;

    Scanner in = new Scanner(System.in);  
    System.out.println("Enter a string");  
    cls0 = in.nextLine();  

    System.out.println("Enter a string");  
    cls1 = in.nextLine(); 
Run Code Online (Sandbox Code Playgroud)