[Kotlin] 문자열 메서드
📚 문자열 메서드
📔 문자열 속성과 메서드
- 인덱스 검색 연산자: 대괄호 기호를 사용하고 인자는 인덱스인 정수를 전달. 검색되는 결과는 문자열 내의 인덱스 위치의 원소인 문자가 검색됨
- 메서드 get: 대괄호 연산자에 해당하는 메서드. 해당 메서드에 인덱스를 전달하여 검색
- 메서드 first: 문자열의 첫 번째 원솟값 조회
- 메서드 last: 문자열의 마지막 원솟값 조회
- 메서드 getOrElse: 인덱스 범위를 넘으면 예외를 발생하게 되므로 범위를 초과했을 때 람다표현식을 실행해 초깃값 제공
- 메서드 getOrNull: 없는 인덱스를 조회할 시 예외가 아닌 널을 반환. 널이 반환되기 때문에 변수에 할당할 시 널러블 자료형으로 지정해야 함
- 속성 length: 문자열 원소의 개수를 조회하는 속성
- 속성 lastIndex: 문자열의 마지막 인덱스를 가진 속성. 조회하면 문자열의 마지막 인덱스를 제공
val str = "문자열 인덱스 조회" // 문자열 객체
val item = str[2] // 하나의 원소를 읽음
println(str.first()) // 첫 번째 원솟값 조회
println(str.last()) // 마지막 원솟값 조회
println(str[0]) // 첫 번째 원솟값 조회
println(str[str.length-1]) // 마지막 원솟값 조회
println(str[str.lastIndex]) // 마지막 원솟값 조회
println(str.get(2)) // 문자열 검색
println(str.getOrElse(str.length, {'0'})) // 범위를 벗어날 경우 초깃값 처리
println(str.getOrNull(str.length)) // 범위를 벗어날 경우 null
문
회
문
회
회
열
0
null
📔 빈 문자열 처리 메서드
- isEmpty(): 빈 문자열 체크, 이스케이프 문자도 문자로 인식
- isBlank(): 빈 문자열 체크, 이스케이프 문자는 문자로 인식하지 않음
- trimEnd(): 마지막 공백만 제거
- trimStart(): 처음 공백만 제거
- trim(): 공백과 이스케이프 문자를 모두 제거
val s1 = "\t"
if(s1.isEmpty()) println("문자열 내에 문자가 없음") // 이스케이프 문자도 문자로 처리
else println("이스케이프가 문자열에 있음")
if (s1.isBlank()) println("빈 문자열") // 이스케이프 문자는 문자로 인식하지 않음
else println("빈 문자열이 아님")
val s2 = " string\t"
println("문자 개수는 ${s2.length}") // 공백, 이스케이프 포함
val s3 = s2.trimEnd()
println("문자 개수는 ${s3.length}") // 공백만 제거
val s4 = s2.trimStart()
println("문자 개수는 ${s4.length}") // 공백만 제거
val s5 = s2.trim()
println("문자 개수는 ${s5.length}") // 공백과 이스케이프 문자 제거
이스케이프가 문자열에 있음
빈 문자열
문자 개수는 8
문자 개수는 7
문자 개수는 7
문자 개수는 6
📔 문자열 비교와 대소문자 메서드
- replaceFirstChar(): 문자열의 첫 글자를 대문자/소문자로 변경
- uppercase(): 문자열을 대문자로 변경
- lowercase(): 문자열을 소문자로 변경
- 연산자 + : 문자열을 결합
- 메서드 to: 두 문자열로 튜플을 구성
val s1 = "Kotlin"
val s2 = "kotlin"
if (s1 == s2) println("동일한 문자열") // 객체 간 비교
else println("대소문자 구분 처리")
val res = s1.compareTo(s2, true) // 대소문자 구분 안함
if (res == 0) println("동일한 문자열")
else println("대소문자 구분 처리")
val s3 = "kotlin study"
println(s3.replaceFirstChar( { it.uppercase() })) // 첫 번째 문자를 대문자로 변환
println("Kotlin study".replaceFirstChar({ it.lowercase() })) // 첫 번째 문자를 소문자로 변환
println(s3.uppercase()) // 문자열 전체를 대문자로 변환
println(s3.lowercase()) // 문자열 전체를 소문자로 변환
val s4 = "문자열 붙이기" + "더하기" // 문자열 연결
println(s4)
val s5 = "튜블" to "만들기" // 문자열로 튜플 구성
println(s5)
대소문자 구분 처리
동일한 문자열
Kotlin study
kotlin study
KOTLIN STUDY
kotlin study
문자열 붙이기더하기
(튜블, 만들기)
📔 문자 필터링 처리
- 메서드 filter: 내부순환을 돌며 람다표현식이 실행한 결과가 참인 경우만 추출
fun Char.isEnglishVowel(): Boolean =
this.lowercase() == 'a'.toString() // 문자열과 문자열 비교
|| this.lowercase() == 'e'.toString()
|| this.lowercase() == 'i'.toString()
|| this.lowercase() == 'o'.toString()
|| this.lowercase() == 'u'.toString()
val s = "Today is Monday"
val res = s.filter { it.isEnglishVowel() } // 문자열 필터링
println("result = ${res}")
println("모음 확인: ${res.length} vowels")
var res1: String = ""
for (i in s) {
if (i.isEnglishVowel()) {
res1 = res1 + i.toString()
}
}
println("result = ${res1}")
println("모음 확인: ${res1.length} vowels")
result = oaioa
모음 확인: 5 vowels
result = oaioa
모음 확인: 5 vowels
📔 리스트 등의 문자열 찾기
- 메서드 startsWith/endsWith: 첫 글자와 마지막 글자를 패턴 매칭
- 메서드 find/findLast: 특정 문자들이 같은 경우 매칭
val words = listOf("zero", "one", "two", "three", "four", "five", "six",
"seven", "eight", "nine")
val res1 = words.filter { it.startsWith("t") }
println("첫 문자가 t = $res1")
val res2 = words.filter { it.endsWith("e") }
println("마지막 문자가 e = $res2")
val m1 = mutableListOf("abc", "def", "ghi", "jkl", "mno", "pqr", "stu", "vws")
val res3 = m1.find { it.startsWith("g") } // 리스트의 find로 순환 검색
println("첫 문자가 g = $res3")
val res4 = m1.findLast { it.endsWith("i")} // 리스트의 findLast로 역순환 검색
println("마지막 문자가 i = $res4")
첫 문자가 t = [two, three]
마지막 문자가 e = [one, three, five, nine]
첫 문자가 g = ghi
마지막 문자가 i = ghi
📔 문자열 분해와 결합
- 메서드 replace: 매칭되는 문자를 변경해 새로운 문자열 반환
- 메서드 contains: 매칭되는 문자열 포함 여부를 확인
- 메서드 split: 매칭되는 문자열을 기준으로 분리하여 리스트로 반환
- 메서드 join: 리스트 내의 문자열을 특정 문자 기준으로 결합
- 메서드 subsequence/substring/slice: 부분 문자열을 만들어 새로운 문자열 객체로 반환
val s1 = "Today is Monday"
val w = s1.replace("Monday", "Sunday") // 문자열 변경
println(w)
val s2 = "Today is Monday"
println(s2.contains("Today")) // 포함 관계
val word = "한국, 미국, 일본, 영국"
val nations = word.split(",") // 문자열 분리
println(nations)
val joins = nations.joinToString(",") // 문자열로 결합
println(joins)
val s3 = "문자열 처리"
println(s3.subSequence(1, 2))
println(s3.substring(1, 2))
println(s3.substring(1..2))
println(s3.slice(1..2))
Today is Sunday
true
[한국, 미국, 일본, 영국]
한국, 미국, 일본, 영국
자
자
자열
자열
📔 StringBuilder 처리
- 메서드 append: 마지막 인덱스 뒤에 추가
- 메서드 insert: 특정 인덱스 위치에 추가
- 메서드 deleteCharAt: 특정 인덱스 위치의 문자 삭제
- 메서드 delete: 시작과 종료 인덱스 사이의 문자 삭제
- 메서드 clear: 전체 삭제
- 메서드 setCharAt: 특정 위치의 문자 변경
- 메서드 capacity: 현재 사용 가능한 사이즈 정보
var str = StringBuilder() // 빈 객체 생성
println("1. 문자열: $str") // 빈 문자열 출력
println(" 길이 = ${str.length}, 용량 = ${str.capacity()}") // 현재 사용 가능한 용량 확인
str.append(5) // 정수 추가
str.append("가나다") // 문자열 추가
str.append('가') // 문자 추가
str.append(true) // Boolean 추가
println("2. 문자열: $str")
println(" 길이 = ${str.length}, 용량 = ${str.capacity()}")
str.insert(0, 5341) // 특정 인덱스 지정 후 정수 추가
str.insert(0, "StringBuilder") // 특정 인덱스 지정 후 문자열 추가
println("3. 문자열: $str")
println(" 길이 = ${str.length}, 용량 = ${str.capacity()}")
str.deleteCharAt(0) // 인덱스를 원소로 전달
str.delete(0, 1) // 특정 인덱스를 지정해서 삭제
println("4. 문자열 = $str")
println(" 길이: ${str.length}, 용량 = ${str.capacity()}")
str.clear() // 전체 삭제
println("5. 문자열 = $str")
println(" 길이 = ${str.length}, 용량 = ${str.capacity()}")
str.append("가나다라")
println(str)
str.setCharAt(3, '가')
println(str)
1. 문자열:
길이 = 0, 용량 = 16
2. 문자열: 5가나다가true
길이 = 9, 용량 = 16
3. 문자열: StringBuilder53415가나다가true
길이 = 26, 용량 = 34
4. 문자열 = ringBuilder53415가나다가true
길이: 24, 용량 = 34
5. 문자열 =
길이 = 0, 용량 = 34
가나다라
가나다가