提问人:Ralph 提问时间:12/19/2012 最后编辑:RadiodefRalph 更新时间:10/19/2021 访问量:1107834
从扫描仪获取 char 输入
Take a char input from the Scanner
问:
我正在尝试找到一种从键盘获取输入的方法。char
我尝试使用:
Scanner reader = new Scanner(System.in);
char c = reader.nextChar();
此方法不存在。
我试着把.然而,它并不总是在所有情况下都有效,因为我从我的方法调用的另一个方法需要 a 作为输入。因此,我必须找到一种方法来显式地将 char 作为输入。c
String
char
有什么帮助吗?
答:
您可以从以下位置获取第一个字符:Scanner.next
char c = reader.next().charAt(0);
要只使用一个字符,您可以使用:
char c = reader.findInLine(".").charAt(0);
要严格使用一个字符,您可以使用:
char c = reader.next(".").charAt(0);
评论
char c = reader.next("[a-zA-Z]").charAt(0);
next()
bhjgfbergq35987t%$#%$#
findInLine()
没有 API 方法可以从扫描程序中获取字符。您应该在返回的 String 上获取 String using 和 invoke 方法。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);
评论
reader.next()
有三种方法可以解决此问题:
调用 Scanner,并提取 String 的第一个字符(例如 ) 如果要将行的其余部分读为字符,请遍历 String 中的其余字符。其他答案有这个代码。
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 ... }
当您通过 从控制台读取时,输入通常由操作系统缓冲,并且仅在用户键入 Enter 时“释放”到应用程序。因此,如果您打算让应用程序响应单个键盘敲击,则这是行不通的。您需要执行一些特定于操作系统的本机代码操作,以在操作系统级别关闭或解决控制台的行缓冲。System.in
参考:
评论
next()
setDelimiter("")
next().charAt(0)
next
String
char
charAt(0)
char
最简单的方法是,首先将变量更改为 String 并接受 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>
}
在 Scanner 类中输入字符的最佳方法是:
Scanner sca=new Scanner(System.in);
System.out.println("enter a character");
char ch=sca.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
设置扫描程序:
reader.useDelimiter("");
之后将返回一个单字符字符串。reader.next()
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");
}
}
这实际上不起作用:
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);
评论
"[^\\s]" === "\\S"
您可以使用类型转换:
Scanner sc= new Scanner(System.in);
char a=(char) sc.next();
这样,由于函数“next()”,您将在 String 中获取输入,但由于括号中提到的“char”,它将被转换为字符。
这种通过在括号中提及目标数据类型来转换数据类型的方法称为类型化。它对我有用,我希望它对你有用:)
评论
String
char
若要查找给定 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);
}
}
试试这个
Scanner scanner=new Scanner(System.in);
String s=scanner.next();
char c=s.charAt(0);
评论
试试这个: 字符 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
顺便说一句,你不能直接将字符作为输入。正如你在上面看到的,首先取一个 String,然后取 charAt(0);被找到并存储
只需使用...
Scanner keyboard = new Scanner(System.in);
char c = keyboard.next().charAt(0);
这将获取下一个输入的第一个字符。
您应该使用自定义输入读取器来更快地获得结果,而不是从读取 String 中提取第一个字符。 自定义 ScanReader 的链接和说明:https://gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8
扫描字符的代码:
BufferedInputStream br=new BufferedInputStream(System.in);
char a= (char)br.read();
评论
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);
评论
// 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');
}
}
评论
InputStreamReader
BufferedReader
您应该使用 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
您可以非常简单地解决“一次获取一个字符”的键盘输入问题。无需全部使用扫描仪,也无需清除输入缓冲区作为副作用,使用此功能。
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);
}
}
}
希望这对您有所帮助,祝您好运!P.S. 对不起,我知道这是一篇较旧的帖子,但我希望我的回答能带来新的见解,并可能帮助其他也有这个问题的人。
有两种方法,您可以只取一个字符,也可以严格采用一个字符。 当您精确使用时,无论您输入多少个字符,读者都只会取第一个字符。
例如:
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 值。
您只需要编写它即可在 char 类型中获取值。
char c = reader.next().charAt(0);
从用户输入中读取字符的简单解决方案。 读取字符串。然后在 String 上使用 charAt(0)
Scanner reader = new Scanner(System.in);
String str = reader.next();
char c = str.charAt(0);
就是这样。
尝试以下操作。
Scanner reader = new Scanner(System.in);
char c = reader.next().charAt(0);
这将从键盘上获取一个字符。
评论