138

我正在尝试找到一种char从键盘获取输入的方法。

我尝试使用:

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

这种方法不存在。

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

有什么帮助吗?

4

24 回答 24

179

您可以从以下位置获取第一个字符Scanner.next

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

要使用一个字符,您可以使用:

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

严格使用一个字符,您可以使用:

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

设置扫描仪:

reader.useDelimiter("");

之后reader.next()将返回一个单字符串。

于 2015-01-18T08:42:26.737 回答
19

没有从 Scanner 获取字符的 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

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

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

参考:

于 2012-12-18T23:15:24.670 回答
5

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

希望这有帮助,祝你好运!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将被设置为'(',你最终会失去' 1' 在下一次调用 next()

通常,当您想获得一个字符时,您想忽略空格。这对我有用:

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

    }
}

只得到一个字符char c = reader.next(".").charAt(0);

于 2017-10-16T13:51:50.057 回答
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 值。

于 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

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

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

于 2016-09-14T14:28:28.647 回答
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
// 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 回答
-1

就用...

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

这将获取下一个输入的第一个字符。

于 2016-12-15T03:05:45.083 回答
-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 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 回答
-2

尝试这个

Scanner scanner=new Scanner(System.in);
String s=scanner.next();
char c=s.charAt(0);
于 2016-08-17T20:30:43.140 回答
-3

您可以使用类型转换:

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

这样,由于函数“next()”,您将在 String 中输入,但由于括号中提到的“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 回答