我试图在一个非常简单的代码中使用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异常,因为我没有输入任何内容。 对可能出错的任何建议?
答案 0 :(得分:1)
使用Console.readLine
从控制台读取输入。您可以使用System.console
获取Console
的实例。
示例:
String s = System.console().readLine("Enter a port number: ");
int port = Integer.parseInt(s);
如果System.console()
返回null,则表示(从JVM的角度来看)您实际上没有控制台。如果您的标准输入已被重定向,则可能会发生这种情况。
答案 1 :(得分:0)
String input = bufferRead.readLine();
if(input != null && !input.isEmpty()) {
int port = Integer.parseInt(input);
} else {
// Handle end of stream
}
Reference用于 readLine 方法。
您可以使用Scanner。你可以做 -
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;
}
}
答案 2 :(得分:0)
我不明白你为什么要面对这个问题。我在Eclipse IDE和windows命令提示符下执行了你的代码,两者似乎都运行正常。 因此,作为一个独立的代码,它工作正常,但如果你间歇性地面对问题,那么可能是由于输入流中已经存在一些未读的字符,因此不允许您输入{{1}所需的更多数据} 方法。 作为清理,我建议打电话
read()
在致电System.in.skip(System.in.available());
之前。
答案 3 :(得分: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);
}
答案 4 :(得分: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
答案 5 :(得分:0)
如果您在Eclipse中运行它,请检查您的运行配置。在常用选项卡上,有标准输入和输出部分。检查“分配控制台(输入所需)”。