0

我正在尝试使用 bufferedreader 在一个非常简单的代码中从控制台读取

System.out.println("Enter a port number : ");

    BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
    String s = bufferRead.readLine();
        int port = Integer.parseInt(s);

打印消息时,它没有给我任何时间在控制台中写入,而是直接显示 Java.lang.NumberFormat 异常,因为我没有输入任何内容。有什么建议可能是错的吗?

4

6 回答 6

1

用于Console.readLine从控制台读取输入。您可以获得Consoleusing的实例System.console

例子:

String s = System.console().readLine("Enter a port number: ");
int port = Integer.parseInt(s);

如果System.console()返回 null,这意味着(从 JVM 的角度来看)您实际上没有控制台。如果您的标准输入已被重定向,则可能会发生这种情况。

于 2013-08-22T16:33:14.253 回答
0

我不明白你为什么面临这个问题。我从 Eclipse IDE 和 Windows 命令提示符中执行了您的代码,两者似乎都运行良好。因此,作为独立代码,它可以正常工作,但如果您间歇性地遇到问题,则可能是由于输入流中已经存在一些未读字符,因此不允许您输入read()方法所需的更多数据。作为清理工作,我建议致电

System.in.skip(System.in.available());

打电话之前read()

于 2013-08-22T16:39:07.193 回答
0

它工作得很好。但我添加了一些检查和一些 try-catch 块。

  public static void main(String[] args)
  {
    System.out.println("Enter a port number: ");

    BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
    String s = null;
    Integer i = null;
    try
    {
      s = bufferRead.readLine();
      System.out.println("INPUT: " + s);

    }
    catch (IOException e)
    {
      System.out.println(e);
    }

    if (s == null)
      return;

    try
    {
      i = Integer.parseInt(s);
    }
    catch (NumberFormatException e)
    {
      System.out.println(e);
      return;
    }
    System.out.println("PORT: " + i);
  }
于 2013-08-22T16:39:37.883 回答
0

你是如何运行这段代码的?我在eclipse上试过了,对我来说效果很好

public static void main(String args[]) throws IOException {
    System.out.println("Enter a port number : ");

    BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
    String s = bufferRead.readLine();
        int port = Integer.parseInt(s);
    System.out.println("entered port :: " + port);    
}

这是输出

Enter a port number : 
56
entered port :: 56
于 2013-08-22T16:40:09.433 回答
0
String input = bufferRead.readLine();

if(input != null && !input.isEmpty()) {
    int port = Integer.parseInt(input);
} else {
    // Handle end of stream
}

readLine方法的参考

您可以使用扫描仪。你可以做-

Scanner sc = new Scanner(System.in);
int i = sc.nextInt();

更新:

根据您的评论,这是整个班级-

import java.io.*;

public class SOTest1{

    public static void main(String args[]) throws IOException {

        System.out.println("Enter a port number : ");

        BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));

        String input = bufferRead.readLine();

        if(isNumber(input)){
            int port = Integer.parseInt(input);
            System.out.println("entered port :: " + port);    
        } else {
            System.out.println("entered port is not a number :: " + input);
        }            

    }

    public static boolean isNumber(final String str) {

       if(str == null || str.isEmpty()){
           return false;
       }

        int size = str.length();

        for (int i = 0; i < size; i++) {
            if (!Character.isDigit(str.charAt(i))) {
                return false;
            }
        }

        return true;
    }

}
于 2013-08-22T16:35:31.547 回答
0

如果您在 Eclipse 中运行它,请检查您的运行配置。在公共选项卡上,有标准输入和输出部分。检查是否选中了“分配控制台(输入所需)”。

于 2013-08-22T16:44:12.547 回答