char
输入的方法。我尝试使用:
Scanner reader = new Scanner(System.in);
char c = reader.nextChar();
此方法不存在。
我尝试将
c
用作String
。但是,由于我要从我的方法中调用的另一种方法需要char
作为输入,因此它并不总是在每种情况下都有效。因此,我必须找到一种将char用作输入的方法。有帮助吗?
#1 楼
您可以从Scanner.next
中提取第一个字符:char c = reader.next().charAt(0);
要完全使用一个字符,可以使用:
char c = reader.findInLine(".").charAt(0);
要严格使用一个字符,可以使用:
char c = reader.next(".").charAt(0);
#2 楼
设置扫描程序:reader.useDelimiter("");
在此之后,
reader.next()
将返回一个单字符字符串。 #3 楼
没有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);
评论
reader.next()是否已经从第一个非白字符开始为您提供了字符串?
– norok2
6月25日10:07
但这会消耗整个字符串。
–下雨
12月20日下午5:12
#4 楼
解决此问题的方法有以下三种:在Scanner上调用
next()
,并提取String的第一个字符(例如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时,“已释放”到应用程序。因此,如果您打算让应用程序响应单个的键盘击键,那么它将无法正常工作。您可能需要做一些特定于OS的本机代码工作,才能在OS级别上关闭或解决控制台的行缓冲。参考:
如何从Java控制台中读取单个字符(在用户键入时)?
评论
“这将使next()标记化为恰好一个字符长的字符串。因此,您可以重复调用next()。charAt(0)来迭代字符。”我认为您的意思是next()仅因为您已经setDelimiter(“”)?但是第三点是+1。
–下雨
12月20日5:20
不,我确实是说next()。charAt(0)。下一个调用返回一个字符串。因此,如果要迭代char值,则需要调用charAt(0)以获取第一个字符。 (这是Java,其中一个字符和一个字符串不是同一东西。)请注意,OP明确指出必须使用char。
– Stephen C
12月20日5:30
#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);
}
}
}
祝您有帮助,祝您好运!附言抱歉,我知道这是一篇较旧的文章,但我希望我的回答能带来新的见解,并可能对其他有此问题的人有所帮助。
#6 楼
这实际上是行不通的: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”
–波西米亚风格♦
15年7月27日在16:30
#7 楼
在Scanner类中输入字符的最佳方法是:Scanner sca=new Scanner(System.in);
System.out.println("enter a character");
char ch=sca.next().charAt(0);
#8 楼
您应该使用自定义输入阅读器以获得更快的结果,而不是从读取String中提取第一个字符。自定义ScanReader的链接和说明:https://gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8
扫描代码Char:
BufferedInputStream br=new BufferedInputStream(System.in);
char a= (char)br.read();
评论
您应在要点中添加要点中的代码,因为有时可能无法使用。
–马库斯
17年6月16日在6:20
添加了@Markus来扫描char。
– NIKUNJ KHOKHAR
17年6月16日在6:24
#9 楼
有两种方法,您可以只使用一个字符,也可以只使用一个字符。当您完全使用时,无论您输入多少个字符,阅读器都只会采用第一个字符。
例如:
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'
但是严格使用时,输入内容应仅为一个字符。如果输入不止一个字符,那么阅读器将不接受输入。假设输入为“ abcd”,则不接受输入,并且变量c将具有Null值。
#10 楼
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);
评论
仅获得一个字符char c = reader.next(“。”)。charAt(0);
– Rakesh Kumar B
17-10-16在13:52
#11 楼
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");
}
}
#12 楼
试试这个:char c = S.nextLine()。charAt(0);
#13 楼
您应该使用Scanner.next()获取String并在返回的String.Exmple上调用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);
}
}
output
Enter a character:
a
You have entered: a
#14 楼
您只需要编写此代码即可获取char类型的值。char c = reader.next().charAt(0);
#15 楼
// 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有什么区别?您在代码中使用了它,但是没有解释。
–下雨
12月20日下午5:22
#16 楼
只需使用...Scanner keyboard = new Scanner(System.in);
char c = keyboard.next().charAt(0);
这将获得下一个输入的第一个字符。
#17 楼
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
#18 楼
试试这个Scanner scanner=new Scanner(System.in);
String s=scanner.next();
char c=s.charAt(0);
评论
但这会消耗整个字符串,您会返回。
–下雨
12月20日5:13
#19 楼
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);找到并存储
#20 楼
您可以使用类型转换:Scanner sc= new Scanner(System.in);
char a=(char) sc.next();
这样,由于函数'next()',您将在String中接受输入,但由于在括号中提到的'char'。
在括号中提到目标数据类型的这种数据类型转换方法称为typecating。它对我有用,我希望对你有用:)
评论
您不能将字符串类型转换为char。
– Stephen C
18年1月12日在23:59
#21 楼
要查找给定字符串中字符的索引,可以使用以下代码: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 楼
最简单的方法是,首先将变量更改为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>
}
评论
参见stackoverflow.com/questions/4007534/…
– Reimeus
2012-12-18 23:36
实际上,它占用多个字符,但仅作用于第一个字符
–拉尔夫
2012年12月19日在2:39
在这种情况下,“完全”和“严格”有什么区别?
–user6096242
17年11月29日在18:02
@Reimeus复制粘贴代码然后运行它的值到底是什么?
–巴尔
18年6月7日在17:37
好吧,next()版本在乱码的输入bhjgfbergq35987t%$#%$#上崩溃,而findInLine()版本没有崩溃。我的问题确实更多地是关于“严格”和“完全”这两个词,而不是相应的代码片段。我没有意识到这些单词不是同义词的上下文。
–user6096242
19年1月4日,13:50