138

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

私は使ってみました:

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

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

として取ってみcましたStringcharただし、メソッドから呼び出している他のメソッドは入力としてaを必要とするため、すべての場合に機能するとは限りません。したがって、charを入力として明示的に取得する方法を見つける必要があります。

何か助けはありますか?

4

24 に答える 24

179

あなたはから最初の文字を取ることができますScanner.next

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

使用できる文字を1つだけ消費するには、次のようにします。

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

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

char c = reader.next(".").charAt(0);
于 2012-12-18T22:43:34.037 に答える
59

スキャナーのセットアップ:

reader.useDelimiter("");

この後reader.next()、1文字の文字列が返されます。

于 2015-01-18T08:42:26.737 に答える
19

スキャナーから文字を取得するためのAPIメソッドはありません。返された文字列に対して、を使用して文字列を取得し、メソッドscanner.next()を呼び出す必要があります。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);
于 2012-12-18T22:43:38.900 に答える
16

この問題に取り組むには3つの方法があります。

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

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

  • ScannerAPIの代わりにReaderAPIを使用してください。このReader.read()メソッドは、入力ストリームから読み取られた1文字を配信します。例えば:

    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固有のネイティブコードを実行する必要があります。

参照:

于 2012-12-18T23:15:24.670 に答える
5

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

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

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

// 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);
        }
    }
}  

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

于 2018-11-17T22:54:59.260 に答える
4

これは実際には機能しません:

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

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

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

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

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

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

参照: スペース以外の単一の文字に一致する正規表現

于 2015-02-25T02:06:09.993 に答える
1

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

Scanner sca=new Scanner(System.in);
System.out.println("enter a character");
char ch=sca.next().charAt(0);
于 2014-01-14T16:19:08.497 に答える
1

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

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

BufferedInputStream br=new BufferedInputStream(System.in);
char a= (char)br.read();
于 2017-06-16T05:59:07.130 に答える
1
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);

于 2017-10-16T13:51:50.057 に答える
1

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であるとします。

于 2019-04-24T06:19:17.843 に答える
1

以下をお試しください。

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

これにより、キーボードから文字が取得されます。

于 2021-10-19T07:10:44.333 に答える
0
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");

    }
}
于 2015-02-15T14:24:24.483 に答える
0

これを試してください:char c = S.nextLine()。charAt(0);

于 2016-09-14T14:28:28.647 に答える
0

Scanner.next()を使用して文字列を取得し、返された文字列に対して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
于 2018-04-19T19:28:39.490 に答える
0

char型で値を取得するには、これを記述する必要があります。

char c = reader.next().charAt(0);
于 2020-01-31T18:51:48.813 に答える
0

ユーザー入力から文字を読み取るための簡単なソリューション。文字列を読み取ります。次に、Stringに対してcharAt(0)を使用します

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

それでおしまい。

于 2021-01-29T05:58:01.430 に答える
-1

使用するだけです...

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

これにより、次の入力の最初の文字が取得されます。

于 2016-12-15T03:05:45.083 に答える
-1
// 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');
}
}
于 2018-04-19T17:32:31.810 に答える
-2
import java.io.*;

class abc // enter class name (here abc is class name)
{
    public static void main(String arg[])
    throws IOException // can also use Exception
    {
        BufferedReader z =
            new BufferedReader(new InputStreamReader(System.in));

        char ch = (char) z.read();
    } // PSVM
} // class
于 2014-12-22T09:50:10.913 に答える
-2

これを試して

Scanner scanner=new Scanner(System.in);
String s=scanner.next();
char c=s.charAt(0);
于 2016-08-17T20:30:43.140 に答える
-2
Scanner key = new Scanner(System.in);
//shortcut way 
char firstChar=key.next().charAt(0);  
//how it works;
/*key.next() takes a String as input then,
charAt method is applied on that input (String)
with a parameter of type int (position) that you give to get      
that char at that position.
You can simply read it out as: 
the char at position/index 0 from the input String
(through the Scanner object key) is stored in var. firstChar (type char) */

//you can also do it in a bit elabortive manner to understand how it exactly works
String input=key.next();  // you can also write key.nextLine to take a String with spaces also
char firstChar=input.charAt(0);
char charAtAnyPos= input.charAt(pos);  // in pos you enter that index from where you want to get the char from

ちなみに、charを直接入力することはできません。上記のように、最初に文字列が取得され、次にcharAt(0)が取得されます。見つかって保存されます

于 2016-11-23T02:52:44.930 に答える
-3

型キャストを使用できます。

Scanner sc= new Scanner(System.in);
char a=(char) sc.next();

このように、関数'next()'により文字列に入力しますが、括弧内に記載されている'char'により文字に変換されます。

宛先データ型を括弧で囲んで言及することによってデータ型を変換するこの方法は、タイプケーティングと呼ばれます。それは私のために働く、私はそれがあなたのために働くことを願っています:)

于 2016-03-26T20:15:03.160 に答える
-4

特定の刺し傷の文字のインデックスを見つけるには、次のコードを使用できます。

package stringmethodindexof;

import java.util.Scanner;
import javax.swing.JOptionPane;

/**
 *
 * @author ASUS//VERY VERY IMPORTANT
 */
public class StringMethodIndexOf {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        String email;
        String any;
        //char any;

//any=JOptionPane.showInputDialog(null,"Enter any character or string to find out its INDEX NUMBER").charAt(0);       
//THE AVOBE LINE IS FOR CHARACTER INPUT LOL
//System.out.println("Enter any character or string to find out its INDEX NUMBER");
       //Scanner r=new Scanner(System.in);
      // any=r.nextChar();
        email = JOptionPane.showInputDialog(null,"Enter any string or anything you want:");
         any=JOptionPane.showInputDialog(null,"Enter any character or string to find out its INDEX NUMBER");
        int result;
        result=email.indexOf(any);
        JOptionPane.showMessageDialog(null, result);

    }

}
于 2016-06-10T20:56:16.810 に答える
-8

最も簡単な方法は、最初に変数を文字列に変更し、入力を文字列として受け入れることです。次に、次のようにif-elseまたはswitchステートメントを使用して入力変数に基づいて制御できます。

Scanner reader = new Scanner(System.in);

String c = reader.nextLine();
switch (c) {
    case "a":
        <your code here>
        break;
    case "b":
        <your code here>
        break;
    default: 
        <your code here>
}
于 2014-01-06T01:40:20.200 に答える