charAt() 란 ❓
Java String 클래스에는 charAt()라는 메서드가 있습니다.
charAt() 메서드는 문자열의 지정된 인덱스에 있는 문자(char)를 반환합니다. 문자열에서 원하는 문자(char)를 뽑을 때 자주 사용합니다.
인덱스에서도 알 수 있듯이 charAt()은 매개변수로 int형 정수를 받아야 합니다.
charAt(int index)
시작 인덱스는 0이며, 주어진 인덱스 번호가 문자열 길이보다 크거나, 매개변수에 음수 값이 들어가면 "StringIndexOutOfBoundsException" 에러가 발생합니다.
위 문제는 charAt() 메서드를 사용하기에 적합한 아주 간단한 문제입니다.
위 코드는 BufferedReader 클래스를 사용한 코드입니다. 16번 째줄이 이번 포스팅에서의 핵심인데, 입력받은 문자열의 0 번째 문자와 마지막 문자를 +연산자를 통해 연결해 줘서 출력했습니다.
그러나 왼쪽 실행 결과와 같이 숫자가 계산된 것을 볼 수 있는데 이는 charAt() 메서드의 반환 타입인 char 때문입니다.
char 타입은 문자를 변수에 대입하면, 문자 그대로 저장되는 것 이 아니라 그 문자에 해당하는 정수 값(아스키 코드 값)이 저장되기 때문에
A : 65 , B : 66 == 65 + 66 === 131이 계산되어서 출력되는 것입니다.
그렇기 때문에 char → String으로 캐스팅(casting)을 해줘야 합니다.
String.valueOf() & Character.toString() & 문자열 연결
char 타입을 String으로 변환하는 방법에는 크게 3가지가 있습니다.
String.valueOf(char)
String 클래스의 valueOf() 메서드는 인자로 받은 객체를 String 객체로 변환하는 메서드입니다.
int num = 10;
char[] data = {'A', 'B', 'C', 'D', 'E'};
boolean b = true;
long l = 100000000000000l;
float f = 0.000000000001f;
double d = 0.11111111111;
System.out.println("int : " + String.valueOf(i) + ", class : " + String.valueOf(i).getClass());
System.out.println("char[] : " + String.valueOf(data) + ", class : " + String.valueOf(data).getClass());
System.out.println("char[] + offset + count : " + String.valueOf(data, 1, 3) + ", class : " + String.valueOf(data, 1, 3).getClass());
System.out.println("boolean : " + String.valueOf(b) + ", class : " + String.valueOf(b).getClass());
System.out.println("long : " + String.valueOf(l) + ", class : " + String.valueOf(l).getClass());
System.out.println("float : " + String.valueOf(f) + ", class : " + String.valueOf(f).getClass());
System.out.println("double : " + String.valueOf(d) + ", class : " + String.valueOf(d).getClass());
위 결과를 보면 String.valueOf()를 통해서 String 타입으로 변환된 것을 볼 수 있습니다.
그런데 String 타입으로 형변환하는 또 다른 메서드는 String.toString()이 있지만 toString()이 아닌 String.valueOf()을 사용하는 이유가 무엇일까요??
두 메소드는 모두 Object의 값을 String으로 변환하는 메서드입니다.
그러나 두 메서드의 차이는 변경하고자 하는 객체 Object가 null인 경우에는 다릅니다.
toString()과 같은 경우 Null PointerException(NPE)를 발생시키지만 valueOf()는 "null"이라는 문자열 자체로 처리하기 때문입니다.
String toS = String.valueOf(null); // NPE 에러 발생
System.out.println(toS);
String val = String.valueOf((Object) null); // "null" 문자열로 변환
System.out.println((val));
위 문제를 String.valueOf()를 사용하여 각각 String 타입으로 형변환을 하고 result에 저장하면 다음과 같은 결과가 나옵니다.
Character.toString()
class Main
{
public static void main(String[] args)
{
char ch = 'A';
String s = Character.toString(ch);
System.out.println(s); // "A"
System.out.println(s.getClass().getName()); // "java.lang.String"
}
문자열 연결 (+)
마지막으로 연결 연산자(+)를 사용하는 것입니다.
빈 문자열 ""에 char 변수를 연결하여 char 값이 String 타입으로 변환하는 방법입니다.
StringBuilder 사용
StringBuilder 클래스를 사용하는 방법도 존재합니다.
StringBuilder 클래스에서 버퍼를 사용하여 문자 시퀀스로 관리하는 데, StringBuilder 클래스가 제공하는 append() 메서드를 사용하여 문자열에 계속해서 추가를 해주는 방식입니다.
참고 ❗
[JAVA] 입출력, BufferedReader, StringTokenizer
Java로 코딩테스트를 보거나 입력을 사용해야 할 때 Scanner 클래스를 사용하면 편리하지만 속도가 느리다는 단점이 있습니다. 그렇기 때문에 속도가 빠른 BufferReader 클래스를 사용을 하면 시간복
pixx.tistory.com
'Language > Java' 카테고리의 다른 글
[JAVA] Stream API에 대해 알아보기 _ Stream 생성 (2/5) (0) | 2024.05.16 |
---|---|
[JAVA] Stream API에 대해 알아보기 (1/5) (0) | 2024.05.15 |
[JAVA] 큰 수 다루기 (BigInteger, BigDecimal) (0) | 2024.05.13 |
[JAVA] 입출력, BufferedReader, StringTokenizer, StringBuilder 알아보기 (0) | 2024.05.12 |
[JAVA] 형 변환 (캐스팅, casting) 알아보기 (0) | 2024.04.29 |