从扫描仪获取字符输入

我试图找到一种方法来从键盘进行char输入。

我试过使用:

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

这个方法不存在。

我试图把c作为一个String 。 然而,它并不总是在每一种情况下工作,因为我从我的方法调用的另一种方法需要一个char作为输入。 因此,我必须找到一种方法来明确地采取一个字符作为输入。

任何帮助?

您可以从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() ,并提取字符串的第一个字符。 如果您想以字符的形式读取该行的其余部分,请遍历字符串中剩余的字符。

  • 使用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时才“释放”到应用程序。 所以,如果你打算你的应用程序响应个别键盘笔画,这是行不通的。 你将需要做一些操作系统特定的本地代码的东西关闭或解决在操作系统级别的控制台线缓冲。

参考:

  • 如何从Java中的控制台读取单个字符(用户输入它)?

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

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

这实际上不起作用:

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

这个问题有一些很好的解释和参考: 为什么Scanner类没有nextChar方法? “扫描仪使用分隔符模式将输入分为令牌”,这非常开放。 例如,当使用这个

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

对于这一行输入“(1 + 9)/(3-1)+ 6-2”来说,下一次返回“(1”,c将被设置为'(',你最终会失去' 1“下一个呼叫下一个()

通常当你想要得到一个字符,你想忽略空白。 这对我工作:

 c = lineScanner.findInLine("[^\\s]").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"); } } 

您应该使用自定义输入阅读器来获得更快的结果,而不是从读取String中提取第一个字符。 自定义ScanReader的链接和说明: 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.next(“。”)。charAt(0);

 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 sc= new Scanner(System.in); char a=(char) sc.next(); 

这样,由于函数'next()',你将在字符串中输入字符串,但是由于方括号中提到的'char',它将被转换成字符。

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

尝试这个

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

而已…

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