답변:
다음에서 첫 번째 문자를 가져올 수 있습니다 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);
스캐너에서 캐릭터를 가져 오는 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);
reader.next()
흰색이 아닌 첫 번째 문자로 시작하는 문자열을 이미 제공 하지 않았 습니까?
이 문제에 접근하는 세 가지 방법이 있습니다.
next()
스캐너를 호출 하고 문자열의 첫 번째 문자 (예 :)를 추출합니다 charAt(0)
. 나머지 줄을 문자로 읽으려면 문자열 의 나머지 문자를 반복합니다. 다른 답변에는이 코드가 있습니다.
setDelimiter("")
구분 기호를 빈 문자열로 설정하는 데 사용 합니다. 이로 인해 next()
정확히 1 자 길이의 문자열로 토큰 화됩니다. 따라서 반복적으로 호출 next().charAt(0)
하여 문자를 반복 할 수 있습니다 . 그런 다음 구분 기호를 원래 값으로 설정하고 정상적인 방법으로 검색을 다시 시작할 수 있습니다!
Scanner API 대신 Reader 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 특정 네이티브 코드 작업을 수행해야합니다.
참고:
"한 번에 한 문자 씩 키보드 입력을 잡는"문제를 매우 간단하게 해결할 수 있습니다. 스캐너를 모두 사용할 필요없이이를 사용하여 부작용으로 입력 버퍼를 지우지 않아도됩니다.
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);
}
}
}
도움이 되었기를 바라며 행운을 빕니다! 추신 죄송합니다.이 게시물이 이전 게시물이라는 것을 알고 있지만 내 답변이 새로운 통찰력을 얻고이 문제를 가진 다른 사람들에게 도움이 될 수 있기를 바랍니다.
이것은 실제로 작동하지 않습니다.
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"
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 = S.nextLine (). charAt (0);
문자열 읽기에서 첫 번째 문자를 추출하는 대신 더 빠른 결과를 위해 사용자 정의 입력 판독기를 사용해야합니다. Custom ScanReader 및 설명 링크 : https://gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8
Char 스캔 코드 :
BufferedInputStream br=new BufferedInputStream(System.in);
char a= (char)br.read();
두 가지 접근 방식이 있으며 정확히 한 문자를 사용하거나 엄격하게 한 문자 를 사용할 수 있습니다 . 정확히 사용하면 입력 한 문자 수에 관계없이 리더는 첫 번째 문자 만 가져옵니다.
예를 들면 :
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 값이 있다고 가정합니다.
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);
// 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
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); 발견 및 저장
주어진 스팅에서 문자의 인덱스를 찾으려면 다음 코드를 사용할 수 있습니다.
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>
}