web-dev-qa-db-ja.com

スキャナから文字入力をする

キーボードからchar入力を受け取る方法を見つけようとしています。

私が使ってみました:

Scanner reader = new Scanner(System.in);
char c = reader.nextChar();

このメソッドは存在しません。

私はcStringとしてみました。私のメソッドから呼び出している他のメソッドは入力としてcharを必要とするのでそれでも、それはすべてのケースで常にうまくいくとは限りません。したがって、charを入力として明示的に取る方法を見つけなければなりません。

何か手助け?

107
Ralph

Scanner.nextから最初の文字を取り出すことができます。

char c = reader.next().charAt(0);

正確に 1文字を消費するには、次のようにします。

char c = reader.findInLine(".").charAt(0);

厳密に 1文字を消費するには、次のようにします。

char c = reader.next(".").charAt(0);
151
Reimeus

スキャナの設定

reader.useDelimiter("");

この後reader.next()は1文字の文字列を返します。

48
hoat4

Scannerから文字を取得するためのAPIメソッドはありません。 scanner.next()を使ってStringを取得し、返されたStringに対してString.charAt(0)メソッドを呼び出す必要があります。

Scanner reader = new Scanner(System.in);
char c = reader.next().charAt(0);

空白文字を安全に扱うために、最初に文字列に対してtrim()を呼び出して空白文字を削除することもできます。

Scanner reader = new Scanner(System.in);
char c = reader.next().trim().charAt(0);
16
PermGenError

この問題に対処する方法は3つあります。

  • スキャナでnext()を呼び出し、文字列の最初の文字を抽出します(例:charAt(0))。行の残りを文字として読みたい場合は、文字列の残りの文字を繰り返します。他の回答にはこのコードがあります。

  • setDelimiter("")を使用して区切り文字を空の文字列に設定します。これにより、next()は正確に1文字の長さの文字列にトークン化されます。そのため、 繰り返し next().charAt(0)を呼び出して文字を繰り返すことができます。その後、区切り文字を元の値に設定して、通常の方法でスキャンを再開できます。

  • Scanner APIの代わりにReader APIを使用してください。 Reader.read()メソッドは、入力ストリームから読み込んだ単一の文字を配信します。例えば:

    Reader reader = new InputStreamReader(System.in);
    int ch = reader.read();
    if (ch != -1) {  // check for EOF
        // we have a character ...
    }
    

System.inを介してコンソールから読むと、通常、入力はオペレーティングシステムによってバッファされ、ユーザーがEnterキーを押したときにアプリケーションに「解放」されるだけです。そのため、アプリケーションが個々のキーボードストロークに反応するようにする場合、これは機能しません。 OSレベルでコンソールのラインバッファリングを無効にしたり回避したりするには、OS固有のネイティブコードを作成する必要があります。

参照:

11
Stephen C

これは実際にはうまくいきません。

char c = reader.next().charAt(0);

この質問には、いくつかの良い説明と参照があります。 ScannerクラスにnextCharメソッドがないのはなぜですか? "Scannerは区切り文字パターンを使用して入力をトークンに分割します"、これはかなりオープンエンドです。例えばこれを使うとき

c = lineScanner.next().charAt(0);

この入力行 "(1 + 9)/(3 - 1)+ 6 - 2"では、next()を呼び出すと "(1"が返され、cは '('に設定され、 ' next()への次の呼び出しで1 '

通常、文字を取得したいときは、空白を無視します。これは私のために働いた:

c = lineScanner.findInLine("[^\\s]").charAt(0);

参照: スペース以外のすべての文字と一致する正規表現 /

3
gary69

この問題を解決するには、「キーボード入力を一度に1文字ずつ取得する」という非常に簡単な方法を使用します。これを使用することにより、Scannerをすべて使用する必要も、副次的に入力バッファをクリアする必要もありません。

char c = (char)System.in.read();

必要なのがC言語の "getChar()"関数と同じ機能だけであれば、これはうまくいきます。 "System.in.read()"の大きな利点は、あなたがつかむたびにバッファがクリアされないことです。あなたがまだすべてのユーザ入力を必要とするのであれば、あなたはまだ入力バッファからそれの残りを得ることができます。 "char c = scanner.next().charAt(0);"の方法は文字を取得しますが、バッファをクリアします。

// Java program to read character without using Scanner
public class Main
{
    public static void main(String[] args)
    {
        try {
            String input = "";
            // Grab the First char, also wait for user input if the buffer is empty.
            // Think of it as working just like getChar() does in C.
            char c = (char)System.in.read();
            while(c != '\n') {
                //<do your magic you need to do with the char here>
                input += c; // <my simple magic>

                //then grab the next char
                c = (char)System.in.read();
            }
            //print back out all the users input
            System.out.println(input);
        } catch (Exception e){
            System.out.println(e);
        }
    }
}  

このお役に立てば幸いです。 P.S申し訳ありませんが、これは古い投稿ですが、私の回答が新しい洞察をもたらし、この問題を抱えている他の人々に役立つことを願っています。

2

Scannerクラスで文字を入力する最善の方法は次のとおりです。

Scanner sca=new Scanner(System.in);
System.out.println("enter a character");
char ch=sca.next().charAt(0);
2
Sahil Gupta

2つのアプローチがあります、 正確に 1文字または 厳密に 1文字のど​​ちらかを取ることができます。正確に使用すると、入力した文字数に関係なく、リーダーは最初の文字だけを受け取ります。

例えば:

import Java.util.Scanner;  

public class ReaderExample {  

    public static void main(String[] args) {  

        try {  

        Scanner reader = new Scanner(System.in);

        char c = reader.findInLine(".").charAt(0);

            reader.close();  

            System.out.print(c);

        } catch (Exception ex) {  

            System.out.println(ex.getMessage());  

        }



    }  

}  

あなたが入力として文字のセットを与えるとき、例えば "abcd"、読者は最初の文字、すなわち文字 'a'だけを考えるでしょう

しかし、厳密に使用するときは、入力は1文字にしてください。入力が複数の文字である場合、読者は入力を受け取りません

import Java.util.Scanner;  

public class ReaderExample {  

    public static void main(String[] args) {  

        try {  

        Scanner reader = new Scanner(System.in);

        char c = reader.next(".").charAt(0);

            reader.close();  

            System.out.print(c);

        } catch (Exception ex) {  

            System.out.println(ex.getMessage());  

        }



    }  

}  

入力に ​​"abcd"を指定した場合、入力は取得されず、変数 c はNull値になります。

1
Omkar hiremath

文字列の読み取りから最初の文字を抽出するのではなく、より速い結果を得るためにカスタム入力リーダーを使用する必要があります。カスタムScanReaderと説明へのリンク: https://Gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8

Charをスキャンするためのコード:

BufferedInputStream br=new BufferedInputStream(System.in);
char a= (char)br.read();
1
NIKUNJ KHOKHAR
import Java.util.Scanner;

public class userInput{
    public static void main(String[] args){
        // Creating your scanner with name kb as for keyBoard
        Scanner kb = new Scanner(System.in);

        String name;
        int age;
        char bloodGroup;
        float height;

        // Accepting Inputs from user
        System.out.println("Enter Your Name");
        name = kb.nextLine(); // for entire line of String including spaces
        System.out.println("Enter Your Age");
        age = kb.nextInt(); // for taking Int
        System.out.println("Enter Your BloodGroup : A/B/O only");
        bloodGroup  = kb.next().charAt(0); // For character at position 0
        System.out.println("Enter Your Height in Meters");
        height = kb.nextFloat(); // for taking Float value

        // closing your scanner object
        kb.close();

        // Outputting All
        System.out.println("Name : " +name);
        System.out.println("Age : " +age);
        System.out.println("BloodGroup : " +bloodGroup);
        System.out.println("Height : " +height+" m");

    }
}
1
HellPreacher
package Pack;

import Java.util.Scanner;

public class test { 
    public static void main(String[] args) {

        Scanner reader = new Scanner(System.in);
        char c = reader.next(".").charAt(0);

    }
}

1文字だけ取得するには、次のようにします。char c = reader.next( "。")。charAt(0);

0
Rakesh Kumar B
// Use a BufferedReader to read characters from the console.
import Java.io.*;
class BRRead {
public static void main(String args[]) throws IOException
{
char c;
BufferedReader br = new
BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter characters, 'q' to quit.");
// read characters
do {
c = (char) br.read();
System.out.println(c);
} while(c != 'q');
}
}
0
John Born

Scanner.next()を使用してStringを取得し、返されたStringに対してString.charAt(0)メソッドを呼び出す必要があります。
例:

    import Java.util.Scanner;

    public class InputC{


            public static void main(String[] args) {
                // TODO Auto-generated method stub
                   // Declare the object and initialize with
                   // predefined standard input object
                    Scanner scanner = new Scanner(System.in);
                    System.out.println("Enter a character: ");
                    // Character input
                    char c = scanner.next().charAt(0);
                    // Print the read value
                    System.out.println("You have entered: "+c);
            }


        }

出力

Enter a character: 
a
You have entered: a
0
Abderrahmen

試してみてください。char c = S.nextLine()。charAt(0);

0
Harshal Mande