사이먼's 코딩노트
[Java] 문자열을 다루는 String 클래스 메서드 본문
[String 클래스 메서드]
- 이번에는 Java에서 문자열을 다루는 String 클래스의 메서드 종류에 대해 몇 가지 알아봅시다.
- String 클래스는 문자열의 추출, 비교, 찾기, 분리, 변환 등과 같은 다양한 메서드를 가지고있다.
- 그 중에서도 사용 빈도수가 높은 메서드를 소개하려 한다.
[charAt()]
- charAt() 메서드는 문자열에서 매개변수로 받은 index 번호에 위치한 문자를 리턴한다.
- 여기서 말하는 index 번호는 0부터 시작한다.
- 예를 들어 str = "abcde" 에서 str.charAt(2)를 호출하면 2번째 위치한 문자 'c'를 의미한다.
[equals()]
- 우리가 보통 알고있는 기본 타입(int, char, long, double 등)은 연산자 '==' 을 통해 변수의 값을 비교할 수 있지만 String과 같은 문자열은 연산자를 통해 비교하면 원하지 않는 결과가 나올 수 있다.
- 이 때, equals()을 사용하여 두 String 객체의 문자열만을 비교할 수 있다.
- 리턴 타입은 참과 거짓을 나타내는 boolean이다.
[getBytes()]
- getBytes() 메서드는 시스템의 기본 문자셋으로 인코딩된 바이트 배열을 리턴한다.
- 만약 특정 문자셋으로 인코딩된 바이트 배열을 얻으려면 매개변수를 가진 getBytes() 메서드를 사용하면 된다.
- 어떤 문자셋으로 인코딩하느냐에 따라 바이트 배열의 크기가 달라진다.
[indexOf()]
- indexOf() 메서드는 문자열에서 매개변수로 받은 특정 문자열로 시작되는 index 번호를 리턴한다.
- 만약 주어진 특정 문자열이 포함되어 있지 않으면 자동으로 -1을 리턴한다.
- 예를 들어 str = "abcde" 에서 str.indexOf("de")를 호출하면 abcde에서 de로 시작하는 부분이 str의 3번째 위치이기 때문에 3이 리턴된다.
[length()]
- length() 메서드는 문자열의 총 길이를 리턴한다.
- 예를 들어 str = "사이먼's 코딩노트" 에서 str.length()를 호출하면 공백을 모두 포함하여 10이 리턴된다.
[replace()]
- replace() 메서드는 매개변수로 target과 replacement 두 가지를 받는데 주어진 문자열에서 target과 동일한 문자열을 찾아 해당 문자열을 replacement로 대체해준다.
- 예를 들어 str1 = "good morning" 에서 str1.replace("morning", "evening")를 호출하면 str1 문자열에서 morning 이라는 문자열을 찾아 해당 문자열을 evening으로 대체해준다.
[substring()]
- substring() 메서드는 주어진 index 번호에서 문자열을 추출한다.
- substring() 메서드는 매개변수를 한개만 받기도 하고 두개를 받기도 한다.
- substring(int beginIndex)는 전체 문자열에서 beginIndex 번째부터 끝까지의 문자열을 추출한다.
- 예를 들어 str = "가나다라마바사" 에서 str.substring(3)을 호출하면 "라마바사" 가 리턴된다.
- substring(int beginIndex, int endIndex)는 전체 문자열에서 beginIndex 번째부터 endIndex 번까지의 문자열을 추출한다.
- 예를 들어 str = "가나다라마바사" 에서 str.substring(2, 4)을 호출하면 "다라마" 가 리턴된다.
[toLowerCase(), toUpperCase()]
- toLowerCase() 메서드는 문자열 모두를 소문자로 바꾸고, 바뀐 새로운 문자열을 리턴한다.
- 예를 들어 str = "AbCDe" 에서 str.toLowerCase()를 호출하면 "abcde"가 리턴된다.
- toUpperCase() 메서드는 문자열 모두를 대문자로 바꾸고, 바뀐 새로운 문자열을 리턴한다.
- 예를 들어 str = "AbCDe" 에서 str.toLowerCase()를 호출하면 "ABCDE"가 리턴된다.
[trim()]
- trim() 메서드는 문자열의 앞뒤 공백을 제거하고 제거한 새로운 문자열을 리턴한다.
- trim() 메서드는 전체 문자열의 앞뒤 공백만 제거할 뿐이지 중간에 존재하는 공백까지 제거하지는 않는다.
- 예를 들어 str = " abc defg " 에서 str.trim()를 호출하면 "abc defg"가 리턴된다.
[valueOf()]
- valueOf() 메서드는 기본 타입의 값을 문자열로 변환하는 기능을 가지고있다.
- String 클래스에는 매개변수의 타입별로 valueOf() 메서드가 오버로딩 되어있다.
- 예를 들어 static String valueOf(char c) 같이 호출하면 기본 타입 char로 선언된 c 문자를 문자열로 변환한다.
[문제]
- 위에서 String 클래스의 주요 메서드를 살펴봤으니 관련된 문제를 풀어봅시다.
- 주어진 코드에서 선언된 문자열에 알파벳 'x'의 개수가 몇 개인지 세도록 코드를 완성해봅시다.
public class Main {
public static void main(String[] args) {
String str = "axslekjxxlkzksazkxxasjzXXXXzakox";
int xCount = 0;
System.out.println("xCount : " + xCount);
}
}
[문제 정답]
public class Main {
public static void main(String[] args) {
String str = new String("axslekjxxlkzksazkxxasjzXXXXzakox");
int xCount = 0;
for(int i = 0; i < str.length(); i++) {
if(str.charAt(i) == 'x' || str.charAt(i) == 'X') {
xCount++;
}
}
// 문제의 정답
System.out.println("xCount : " + xCount);
// str의 총 길이
System.out.println(str.length());
// str 문자열에서 5번째 위치에 해당하는 문자
System.out.println(str.charAt(5));
// str 문자열에서 3번째 부터 8번째 인덱스 전까지의 문자열
System.out.println(str.substring(3, 8));
// str 문자열에서 "axslek"을 타겟으로 하고 해당 문자열을 "12345"로 변경
System.out.println(str.replace("axslek", "12345"));
// str 문자열에서 XXXX로 시작하는 부분이 몇 번째 인덱스?
System.out.println(str.indexOf("XXXX"));
}
}
- 문제는 전체 문자열 str에서 알파벳 'x'가 몇 개나 있는지 세어보는 것을 요구하고 있다.
- 여기서는 반복문을 사용하여 문자열의 0번째 부터 마지막 인덱스 번호까지 하나씩 문자를 검사하는 방법을 적용할 수 있다.
- 먼저 전체 문자열의 마지막 인덱스 번호를 알기 위해서는 length()를 사용하여 총 길이를 얻는다.
- 반복문에서 인덱스는 0번째부터 str.length() 까지 1씩 증가하면서 전체 문자열을 체크할 수 있도록 한다.
- 그리고 조건문을 통해 각 문자가 알파벳 x와 일치하면 xCount라는 변수에 1씩 카운트를 해준다.
- 이 때 각 문자가 알파벳 x와 일치한지 아닌지를 확인하는 메서드는 charAt()을 사용한다.
- str.charAt(i) == 'x'를 통해 i번째 있는 문자가 알파벳 x랑 같은지 비교한다.
- 필자는 소문자 x와 대문자 X 모두 일치하다면 xCount에 1씩 카운트를 해줬다.
- 이 외에 위에서 설명된 몇 가지 메서드에 대해 주석과 함께 출력문으로 원하는 값들을 출력해보았으니 참고하면 좋을 것 같다.
반응형
'Java > Java' 카테고리의 다른 글
[Java] 형변환 문제풀이 (0) | 2024.03.13 |
---|---|
[Java] 형변환(래퍼클래스 / Object) (0) | 2024.03.13 |
[Java] static (0) | 2024.03.12 |
[Java] super / final / switch (0) | 2024.03.12 |
[Java] 생성자 문제풀이 (0) | 2024.03.12 |