从扫描仪获取字符输入

我试图找到一种方法,从键盘采取 char输入。

我试着用:

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

这个方法不存在。

我试过把 c作为 String。然而,它并不总是在每种情况下都能工作,因为从我的方法调用的另一个方法需要 char作为输入。因此,我必须找到一种方法来显式地将 char 作为输入。

有人帮忙吗?

1078132 次浏览

你可以从 Scanner.next中取出第一个字符:

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

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

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

要使用 严格来说,您可以使用以下一个字符:

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

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

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

  • 在扫描器上调用 next(),并提取字符串的第一个字符(例如 charAt(0))如果你想以字符的形式读取行的其余部分,那么迭代字符串中剩余的字符。其他答案都有这个密码。

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

  • 使用 ReaderAPI 而不是 ScannerAPI。Reader.read()方法传递从输入流读取的单个字符。例如:

    Reader reader = new InputStreamReader(System.in);
    int ch = reader.read();
    if (ch != -1) {  // check for EOF
    // we have a character ...
    }
    

When you read from the console via System.in, the input is typically buffered by the operating system, and only "released" to the application when the user types ENTER. So if you intend your application to respond to individual keyboard strokes, this is not going to work. You would need to do some OS-specific native code stuff to turn off or work around line-buffering for console at the OS level.

Reference:

最简单的方法是,首先将变量更改为 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);

参考文献: 正则表达式匹配除空格以外的任何单个字符

你可以使用类型转换:

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

这样,由于函数‘ next ()’,您将在 String 中获取输入,但是由于括号中提到的‘ char’,它将被转换为字符。

通过在括号中提及目标数据类型来转换数据类型的这种方法称为类型化。对我有用,我希望对你有用:)

要查找给定骗局中字符的索引,可以使用以下代码:

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

试试这个: 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

顺便说一下,您不能直接将 char 作为输入。正如您在上面看到的,首先获取一个 String,然后找到并存储 charAt (0) ;

只要用..。

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

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

您应该使用自定义输入读取器来获得更快的结果,而不是从读取 String 中提取第一个字符。 自定义扫描阅读器链接和解释: < a href = “ https://gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8”rel = “ nofollow norefrer”> 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');
}
}

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

希望这对你有所帮助,祝你好运!附注: 对不起,我知道这是一个较老的职位,但我希望我的答案带来新的见解,可能会帮助其他人谁也有这个问题。

有两种方法,您可以采取 完全正确一个字符或 严格来说一个字符。 当您正确地使用时,读取器将只读取第一个字符,而不管您输入多少个字符。

例如:

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

从用户输入中读取字符的简单解决方案。 读取一个字符串,然后在字符串上使用 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);

这将从键盘得到一个字符。