[java] 스캐너에서 문자 입력 가져 오기

char키보드에서 입력 을받는 방법을 찾으려고합니다 .

나는 사용해 보았다 :

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

이 방법은 존재하지 않습니다.

나는 복용 시도 cA와 String. 그러나 내 메서드에서 호출하는 다른 메서드 char는 입력으로 a 가 필요하기 때문에 모든 경우에 항상 작동하는 것은 아닙니다 . 따라서 명시 적으로 문자를 입력으로 취하는 방법을 찾아야합니다.

도움이 필요하세요?



답변

다음에서 첫 번째 문자를 가져올 수 있습니다 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()스캐너를 호출 하고 문자열의 첫 번째 문자 (예 :)를 추출합니다 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);

참조 :
공백이 아닌 단일 문자와 일치하는 정규식


답변

Scanner 클래스에서 문자를 입력하는 가장 좋은 방법은 다음과 같습니다.

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