キーボードからchar
入力を受け取る方法を見つけようとしています。
私が使ってみました:
Scanner reader = new Scanner(System.in);
char c = reader.nextChar();
このメソッドは存在しません。
私はc
をString
としてみました。私のメソッドから呼び出している他のメソッドは入力としてchar
を必要とするのでそれでも、それはすべてのケースで常にうまくいくとは限りません。したがって、charを入力として明示的に取る方法を見つけなければなりません。
何か手助け?
Scanner.next
から最初の文字を取り出すことができます。
char c = reader.next().charAt(0);
正確に 1文字を消費するには、次のようにします。
char c = reader.findInLine(".").charAt(0);
厳密に 1文字を消費するには、次のようにします。
char c = reader.next(".").charAt(0);
スキャナの設定
reader.useDelimiter("");
この後reader.next()
は1文字の文字列を返します。
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);
この問題に対処する方法は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固有のネイティブコードを作成する必要があります。
参照:
これは実際にはうまくいきません。
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);
参照: スペース以外のすべての文字と一致する正規表現 /
この問題を解決するには、「キーボード入力を一度に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申し訳ありませんが、これは古い投稿ですが、私の回答が新しい洞察をもたらし、この問題を抱えている他の人々に役立つことを願っています。
Scannerクラスで文字を入力する最善の方法は次のとおりです。
Scanner sca=new Scanner(System.in);
System.out.println("enter a character");
char ch=sca.next().charAt(0);
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値になります。
文字列の読み取りから最初の文字を抽出するのではなく、より速い結果を得るためにカスタム入力リーダーを使用する必要があります。カスタムScanReaderと説明へのリンク: https://Gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8
Charをスキャンするためのコード:
BufferedInputStream br=new BufferedInputStream(System.in);
char a= (char)br.read();
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");
}
}
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);
// 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');
}
}
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
試してみてください。char c = S.nextLine()。charAt(0);