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 Exception が表示されます。何が間違っている可能性があるかについて何か提案はありますか?

4

6 に答える 6

1

Console.readLineコンソールからの入力を読み取るために使用します。Consoleを使用してインスタンスを取得できますSystem.console

例:

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

null を返す場合System.console()、(JVM の観点から) 実際にはコンソールがないことを意味します。これは、標準入力がリダイレクトされた場合に発生することがあります。

于 2013-08-22T16:33:14.253 に答える
0

Eclipse で実行している場合は、実行構成を確認してください。共通タブには、標準入力と出力のセクションがあります。「コンソールを割り当てる(入力に必要)」にチェックが入っていることを確認します。

于 2013-08-22T16:44:12.547 に答える
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 に答える