development

스캐너에서 문자 입력

big-blog 2020. 7. 29. 07:22
반응형

스캐너에서 문자 입력


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

나는 다음을 사용하려고 시도했다.

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

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

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

어떤 도움?


첫 번째 캐릭터는 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 메소드는 없습니다. 리턴 된 String에서 메소드를 사용 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)하여 문자를 반복 할 수 있습니다 . 그런 다음 구분 기호를 원래 값으로 설정하고 정상적인 방식으로 스캔을 다시 시작할 수 있습니다!

  • 스캐너 API 대신 리더 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 = reader.next().charAt(0);

이 질문에 대한 좋은 설명과 참고 자료 가 있습니다. Scanner 클래스에 nextChar 메소드가없는 이유는 무엇입니까? "스캐너는 구분 기호 패턴을 사용하여 입력을 토큰으로 나눕니다." 예를 들어 이것을 사용할 때

c = lineScanner.next().charAt(0);

"(1 + 9) / (3-1) + 6-2"입력 행에 대해 다음에 대한 호출은 "(1")을 반환합니다. c는 '('로 설정되고 ' 다음 next () 호출시 1 '

일반적으로 문자를 얻으려면 공백을 무시하고 싶습니다. 이것은 나를 위해 일했다 :

c = lineScanner.findInLine("[^\\s]").charAt(0);

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


"한 번에 한 문자 씩 키보드 입력을 잡는"문제를 매우 간단하게 해결할 수 있습니다. 이 기능을 사용하면 스캐너를 모두 사용할 필요없이 입력 버퍼를 부작용으로 지우지 않아도됩니다.

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

도움이 되길 바랍니다. 행운을 빌어 요! 추신 : 죄송합니다.이 게시물이 더 오래된 게시물이라는 것을 알고 있지만 제 답변이 새로운 통찰력을 가져다주고이 문제가있는 다른 사람들을 도울 수 있기를 바랍니다.


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

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

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

    }
}

문자열 읽기에서 첫 번째 문자를 추출하는 대신 빠른 결과를 얻으려면 사용자 정의 입력 리더를 사용해야합니다. 사용자 정의 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 값이 있다고 가정합니다.


이것을 시도하십시오 : char c = S.nextLine (). charAt (0);


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.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

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

이 시도

Scanner scanner=new Scanner(System.in);
String s=scanner.next();
char c=s.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);<br>
char c = keyboard.next().charAt(0);

그게 다야 ...


타입 캐스팅을 사용할 수 있습니다 :

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

이 방법으로 함수 'next ()'로 인해 문자열에 입력을하지만 대괄호에 언급 된 'char'로 인해 문자로 변환됩니다.

This method of conversion of data type by mentioning the destination data type in brackets is called typecating. It works for me, I hope it works for u :)


To find the index of a character in a given sting, you can use this code:

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

    }

}

The easiest way is, first change the variable to a String and accept the input as a string. Then you can control based on the input variable with an if-else or switch statement as follows.

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>
}

참고URL : https://stackoverflow.com/questions/13942701/take-a-char-input-from-the-scanner

반응형