자바에서 단일 문자를 입력받을 수 있는 방법에 대해 알아보자!
Contents
1. 문자 하나만 입력받지 못 하는 이유
2. 문자 하나만 입력받는 방법
1. 문자 하나만 입력받지 못 하는 이유
자바를 공부하고 있는데, Scanner 객체의 next() 메서드로 단일 문자를 입력받으려고 하니 오류가 떴다.
import java.util.Scanner;
public class HelloWorld
{
public static void main(String[] args)
{
Scanner sc = new Scanner (System.in);
char ch = sc.next(); // Type mismatch: cannot convert from String to char
sc.close();
System.out.print(ch);
}
}
String을 char로 변환할 수 없어 타입 불일치(Type mismatch) 오류가 뜬 것이다!
오류가 뜬 이유는 다음과 같았다.
- Scanner 객체의 next() 메서드는 입력 받은 데이터를 문자열(String) 타입으로 반환한다.
- 자바에서는 문자열(String)과 단일 문자(char)를 엄격하게 구분한다!
따라서 서로 다른 자료형을 대입하려고 하면 자바에서는 이를 허용하지 않고 에러를 발생시킨다.
예를 들어 문자 a는 String 타입에서는 "a"로, char 타입에서는 'a'로 저장된다.
찾아보니, Scanner 클래스에서는 한 문자만을 읽어 들이는 메서드가 제공되지 않는다고 한다.
(C언어처럼 문자를 정수 값으로 읽어들이는 방식도 지원되지 않는다)
따라서 문자 하나만 입력받으려면 charAt(0) 메서드를 사용하거나, System.in.read() 메서드를 사용해야 한다.
2. 문자 하나만 입력받는 방법
1) charAt() 메서드 사용하기
문자열(String)에서 원하는 문자 하나를 가져오는 메서드이다.
char charAt(int index)
index로 입력한 위치에 있는 문자(char)을 반환해준다.
이 메서드를 Scanner.next()와 함께 사용하면 입력 받은 문자열의 첫 번째 문자를 가져올 수 있다!
첫 번째 문자는 0번 인덱스에 있으므로, charAt(0) 으로 사용한다.
import java.util.Scanner;
public class HelloWorld
{
public static void main(String[] args)
{
Scanner sc = new Scanner (System.in);
char ch = sc.next().charAt(0);
sc.close();
System.out.print(ch);
}
}
// 실행 결과
Hello
H
\n은 자동으로 버려지기 때문에 성공적으로 한 문자만 입력받을 수 있다.
2) System.in.read() 메서드 사용하기
입력 버퍼에서 1바이트를 읽어 해당 바이트의 정수 값을 반환하는 메서드이다.
엔터 키(\n)까지 입력된 문자열 중 1바이트를 읽어온다. 따라서 (char) 형태로 변환해주면 \n까지 입력된 데이터에서 첫 번째 글자만 가져올 수 있다.
(이때 입력 버퍼에 \n이 남아있으므로 필요 시에는 꼭 처리해주어야 한다!)
import java.io.IOException;
public class HelloWorld
{
public static void main(String[] args) throws IOException
{
char ch = (char)System.in.read();
System.out.print(ch);
}
}
// 실행 결과
Hello
H
사용하려면 java.io.IOException 클래스를 import 해주어야 하며, 예외 처리를 위해 throws IOException을 main 옆에 추가해주어야 한다.
'Programming > JAVA' 카테고리의 다른 글
[Java] 문자열의 시작과 끝 검사하기 - startsWith, endsWith (4) | 2025.01.24 |
---|---|
[Java] 문자열 비교하기 (==, equals, compareTo) (3) | 2025.01.22 |
[Java] 문자열에서 특정 문자 바꾸기 (0) | 2025.01.22 |
[Java] foreach문 사용하기 (0) | 2025.01.12 |
[Java] 난수(Random number) 생성하기 (1) | 2025.01.12 |