Возьмите вход char со сканера



Я пытаюсь найти способ, чтобы взять char ввод с клавиатуры.



Я пробовал использовать:



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


этот метод не существует.



я пыталась писать c как String. Тем не менее, это не всегда будет работать в каждом случае, так как другой метод, который я вызываю из моего метода, требует char в качестве входных данных. Поэтому я должен найти способ явно взять символ в качестве входных данных.



помочь?

666   19  

19 ответов:

вы можете взять первый символ из Scanner.next:

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

для потребления ровно один символ, который вы могли бы использовать:

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

для потребления строго один символ, который вы могли бы использовать:

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

настройки сканера:

reader.useDelimiter("");

после этого reader.next() вернет односимвольную строку.

нет метода 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);

есть три способа подойти к этой проблеме:

  • вызов next() на сканере и извлеките первый символ строки (например,charAt(0)) Если вы хотите прочитать остальную часть строки как символы, перебрать оставшиеся символы в строке. Другие ответы имеют этот код.

  • использовать setDelimiter("") чтобы установить разделитель в пустую строку. Это вызовет next() для токенизации в строки, содержащие ровно один символ длинный. Так что тогда вы можете неоднократно вызов next().charAt(0) для перебора символов. Затем вы можете установить разделитель в исходное значение и возобновить сканирование обычным способом!

  • используйте API считывателя вместо 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 входные данные, как правило, буферизованные операционная система, и только "выпущенный" к применению когда типы потребителя вписывают. Поэтому, если вы хотите, чтобы ваше приложение реагировало на отдельные удары клавиатуры, это не сработает. Вам нужно будет сделать некоторые специфические для ОС вещи собственного кода, чтобы отключить или обойти буферизацию строк для консоли на уровне ОС.

ссылки:

Это на самом деле не работает:

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

есть некоторые хорошие объяснения и ссылки в этом вопросе: почему класс сканера не имеет метода nextChar? "Сканер разбивает свой вход на маркеры, используя шаблон разделителя", который довольно открыт. Например, при использовании этого

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

для этой строки ввода "(1 + 9) / (3 - 1) + 6 - 2" звонок на следующий возвращается "(1", " C " будет установлен в '(', и вы будете в конечном итоге потерять '1' на следующий вызов к следующему ()

обычно, когда вы хотите получить символ, который вы хотели бы игнорировать пробелы. Это сработало для меня:

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

ссылка: регулярное выражение, чтобы соответствовать одному символу, который ничего, кроме пробела

лучший способ взять ввод символа в классе сканера является:

Scanner sca=new Scanner(System.in);
System.out.println("enter a character");
char ch=sca.next().charAt(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");

    }
}

вы должны использовать свой пользовательский считыватель ввода для более быстрых результатов вместо извлечения первого символа из строки чтения. Ссылка для пользовательского сканера и объяснения:https://gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8

код для сканирования Char:

BufferedInputStream br=new BufferedInputStream(System.in);
char a= (char)br.read();
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);

    }
}

чтобы получить только один символ char c = reader.следующий."(").используя метод 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');
}
}

вы должны получить строку с помощью сканера.далее () и вызвать строку.метод charAt (0) в возвращаемой строке.
Exmple :

    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
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

попробуй такое

Scanner scanner=new Scanner(System.in);
String s=scanner.next();
char c=s.charAt(0);

попробуйте это: char c=S. nextLine ().используя метод charat(0);

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

кстати, вы не можете взять символ непосредственно в качестве входных данных. Как вы можете видеть выше, сначала берется строка, затем charAt (0); находится и хранится

просто использовать...

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

вот и все...

вы можете использовать typecasting:

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

таким образом, вы будете принимать ввод в строку из-за функции 'next ()', но затем он будет преобразован в символ из-за 'char', упомянутого в скобках.

этот метод преобразования типа данных путем указания целевого типа данных в скобках называется типизацией. Это работает для меня, я надеюсь, что это работает для U :)

чтобы найти индекс символа в данном sting, вы можете использовать этот код:

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

    }

}

самый простой способ-сначала изменить переменную на строку и принять входные данные в виде строки. Затем вы можете управлять на основе входной переменной с помощью оператора 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>
}

Comments

    Ничего не найдено.