0

コマンドライン Java アプリケーションを作成しています。端末の入出力を処理するクラスがあります。はい/いいえ (y/n) で簡単に質問したいと思います。これは私のコードです:

public boolean yn(String prompt) {
    // ask a yes/no question
    out(prompt);
    try {
        while(true) {
            char result = (char) br.read();
            out("\n");
            if( ( (Character) Character.toLowerCase(result) ).toString().equals("y") ) {
                return true;
            } else if( ( (Character) Character.toLowerCase(result) ).toString().equals("n") ) {
                return false;
            }
            // not y or n
            out(Messages.informYN);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return false;
}

brは次のように設定された BufferedReader です。

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

outは単純にテキストを出力します

System.out.print(text);

問題は、入力が与えられていない場合、br.read() が最初に新しい行をすぐに返すことです。

私は Java にかなり慣れていないので、お手柔らかにお願いします。

4

1 に答える 1

0

このメソッドは、[Enter] が押されるまでコンソールから読み取ります。

    public final String ConsoleReadln(String promptStr) {
    StringBuffer retSb = new StringBuffer();

    try {
        System.out.print(promptStr);
        byte[] buf = new byte[1];
        System.in.skip(System.in.available());
        int i = 0;
        char c = 0;
        do {
            if ( System.in.read(buf,0,1) > 0 ) {
                i = (int) buf[0]; if (i<0) i += 0x100; c = (char) i;
                if ((c != '\n') && (c != '\r')) retSb.append(c);
            }
        }
        while ((c != '\n') && (c != '\r')) ;
    } // try
    catch (Exception ex)  {
    }
    return retSb.toString();
}
于 2012-06-24T13:41:00.997 に答える