从扫描仪获取char输入

时间:2012-12-18 22:42:21

标签: java input char java.util.scanner

我正试图找到一种从键盘输入char输入的方法。

我尝试使用:

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

此方法不存在。

我尝试将c作为String。然而,它并不总是适用于所有情况,因为我从我的方法调用的另一种方法需要char作为输入。因此,我必须找到一种方法来明确地将char作为输入。

任何帮助?

23 个答案:

答案 0 :(得分:153)

您可以从Scanner.next获取第一个字符:

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

使用完全可以使用的一个字符:

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

使用严格一个可以使用的字符:

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

答案 1 :(得分:48)

设置扫描仪:

reader.useDelimiter("");

此后reader.next()将返回单字符字符串。

答案 2 :(得分:16)

没有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 :(得分:11)

有三种方法可以解决这个问题:

  • 在扫描仪上调用next(),并提取字符串的第一个字符(例如charAt(0))如果要将该行的其余部分读作字符,请迭代剩余的字符在字符串中。其他答案都有此代码。

  • 使用setDelimiter("")将分隔符设置为空字符串。这将导致next()标记为正好一个字符长的字符串。那么你可以重复调用next().charAt(0)来迭代字符。然后,您可以将分隔符设置为其原始值,并以正常方式继续扫描!

  • 使用Reader API代替Scanner 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时“释放”到应用程序。因此,如果您打算让应用程序响应各个键盘敲击,这是行不通的。您需要执行一些特定于操作系统的本机代码来关闭或解决操作系统级别的控制台的行缓冲。

参考:

答案 4 :(得分:3)

这实际上不起作用:

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

这个问题有一些很好的解释和参考: Why doesn't the Scanner class have a nextChar method? “扫描仪使用分隔符模式将其输入分解为令牌”,这是非常开放的。例如,使用此

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

这一行输入 “(1 + 9)/(3 - 1)+ 6 - 2” 对next的调用返回“(1”,c将被设置为'(',并且在下一次调用next()时最终会丢失'1'

通常,当你想要获得一个角色时,你想忽略空格。这对我有用:

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

参考: regex to match a single character that is anything but a space

答案 5 :(得分:2)

在Scanner类中输入字符的最佳方法是:

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

答案 6 :(得分:2)

您可以非常简单地解决此问题,即“一次抓住一个键盘输入一个字符”。通过使用此方法,不必全部使用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);
        }
    }
}  

希望这会有所帮助,祝您好运!附言抱歉,我知道这是一篇较旧的文章,但我希望我的回答能带来新的见解,并可能对其他也遇到此问题的人有所帮助。

答案 7 :(得分:1)

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

    }
}

答案 8 :(得分: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”。

但是严格使用时,输入内容应仅为一个字符。如果输入的字符超过一个,则阅读器将不会接受输入

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

答案 9 :(得分:1)

您应该使用自定义输入阅读器来获得更快的结果,而不是从读取字符串中提取第一个字符。 自定义ScanReader的链接和说明:https://gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8

扫描字符代码:

BufferedInputStream br=new BufferedInputStream(System.in);
char a= (char)br.read();

答案 10 :(得分:0)

从用户输入中读取字符的简单解决方案。 读取一个字符串。然后在字符串上使用 charAt(0)

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

就是这样。

答案 11 :(得分:0)

您只需要编写此代码即可获取char类型的值。

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

答案 12 :(得分:0)

您应该使用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

答案 13 :(得分: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');
}
}

答案 14 :(得分:0)

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.next(“。”)。charAt(0);

答案 15 :(得分:0)

试试这个: char c = S.nextLine()。charAt(0);

答案 16 :(得分:-1)

只需使用......

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

那是......

答案 17 :(得分:-1)

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作为输入。如上所示,首先获取String,然后是charAt(0);找到并存储

答案 18 :(得分:-1)

试试这个

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

答案 19 :(得分:-1)

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

答案 20 :(得分:-2)

您可以使用类型转换:

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

这样你就可以在String中输入,因为函数&#39; next()&#39;但是由于&#39; char&#39;它将被转换成字符。在括号中提到。

通过在括号中提及目标数据类型来转换数据类型的方法称为类型转换。它适用于我,我希望它适用于你:)

答案 21 :(得分:-3)

要查找给定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);

    }

}

答案 22 :(得分:-7)

最简单的方法是,首先将变量更改为String并将输入作为字符串接受。然后,您可以使用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>
}