1. 문자열의 기본 처리
문자열 : 연속된 문자의 배열
- 불변값으로 생성되어 참조되고 있는 메모리가 변경될 수 없음
- 새로운 값 할당하려면 새로운 문자열을 위한 메모리 만들어 할당해야 함
val hello: String = "Hello World!"
println(hello[0]) //h
hello[0] = 'K' //오류!
var s = "abcdefg"
s = "xyz" //새로운 메모리 공간이 생성됨
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
s1과 s2의 hello는 완전히 동일한 공간에 있음
but new로 선언되면 heap의 다른 공간에 만들어짐
1) 문자열 추출하고 병합하기 substring( ), subSequence( )
String.substring(인덱스 범위 지정): String
CharSequence.subSequence(인덱스 범위 지정): CharSequence
s = "abcdefg"
println(s.substring(0..2)) //인덱스 0번~2번 범위의 abc 반환
var s = "abcdef"
s = s.substring(0..1) + "X" + s.substring(3..s.length-1)
ab + X + def
마지막 인덱스 = s.length-1
2) 문자열 비교하기 compareTo( )
- s1.compareTo(s2) : s1 이 s2보다 작으면(사전적으로 뒤) 양수 / 같으면 0 / s1이 s2보다 크면(사전적으로 앞) 음수 반환
fun main() {
val s1 = "Hello Kotlin"
val s2 = "Hello KOTLIN"
println(s1.compareTo(s2))
println(s1.compareTo(s2, true)) //대소문자 무시
}
32 //K 와 k 사이의 아스키코드 값 차이
0
3) StringBuilder 사용하기
: 문자열이 사용할 공간을 좀 더 크게 잡을 수 있음 -> 특정 단어를 변경할 수 있게 됨
var s = StringBuilder("Hello")
s[2] = 'x'
Hexlo
- 메모리 공간을 새롭게 만들지 않고 여유분의 공간을 이용해 문자 요소를 변경
s.append("World") //문자열 추가, HexloWorld
s.insert(10, "Added") //인덱스 10번부터 추가되어 HexloWorldAdded
s.delete(5,10) //인덱스 5번부터 10번 전까지 삭제, HexloAdded
4) 기타 문자열 처리 toLowerCase, toUpperCase, split, trim
- 각 함수는 원본 문자열을 변경하지 않고, 새로운 문자열을 반환함
fun main() {
// toLowerCase: 문자열을 모두 소문자로 변환
val str1 = "Hello World"
val lowerCaseStr = str1.toLowerCase()
println(lowerCaseStr) // 출력: hello world
// toUpperCase: 문자열을 모두 대문자로 변환
val str2 = "Hello World"
val upperCaseStr = str2.toUpperCase()
println(upperCaseStr) // 출력: HELLO WORLD
// split: 문자열을 지정된 구분자를 기준으로 나누어 배열로 반환
val str3 = "apple,orange,banana"
val fruitsArray = str3.split(",") // 쉼표를 기준으로 문자열을 나누어 배열List<String>로 반환
println(fruitsArray) // 출력: [apple, orange, banana]
// trim: 문자열의 앞뒤 공백을 제거
val str4 = " Hello World "
val trimmedStr = str4.trim()
println(trimmedStr) // 출력: Hello World
}
=, - 가 사용되는 부분에서 문자열이 잘리게 하려면
str.split("=", "-")
5) 문자열을 정수로 변환하기
- toInt() 메서드는 자바의 Integer.parseInt를 사용함
fun main() {
try{
"12w".toInt() //숫자가 아닌 문자 w가 포함되어 예외 발생
} catch(e: NumberFormatException){
println(e.printStackTrace())
}
}
//숫자가 아닌 문자가 포함되었을 때 null을 반환받으려면 toIntOrNull( )
fun main() {
try{
"12w".toIntOrNull() //숫자가 아닌 문자 w가 포함되어 예외 발생, but 프로그램 중단되진 않음
} catch(e: NumberFormatException){
println(e.printStackTrace())
}
}
2. 리터럴 문자열
: 특수한 문자를 처리하기 위해 \ 를 포함한 문자 표현인 이스케이프 문자를 사용할 수 있음
\t 탭 | \r 캐리지 리턴 | \\ 백슬래시 | \b 백스페이스 |
\' 작은따옴표 | \" 큰따옴표 | \$ 달러기호 | \n 개행 ( new line ) |
fun main() {
val multilineString = """
|Hello
| World
| Kotlin
"""
println(multilineString)
}
|Hello
| World
| Kotlin
fun main() {
val multilineString = """
|Hello
| World
| Kotlin
""".trimMargin()
println(multilineString)
}
Hello
World
Kotlin
- 형식 문자 사용하기
%b 참거짓 boolean | %o 8진 정수 | %g 10진 or E 표기법의 정수 | %d 부호 있는 정수 |
%t 날짜나 시간 | %n 줄 구분 | %f 10진 실수 | %c 문자 |
%h 해시코드 | %x 16진 정수 | %e E 표기법의 실수 | %s 문자열 |
fun main() {
val pi = 3.141592
val dec = 10
val s = "Hello"
println("pi = %.2f, %3d, %s".format(pi, dec, s))
}
pi = 3.14, 10, Hello
소수점 아래 자리 / 3자리 차지하게
'언어 > Kotlin' 카테고리의 다른 글
OBJECT, MAP 접근 코드 (# 추가하기) (0) | 2024.04.04 |
---|---|
[Kotlin 공부] object와 싱글톤, object와 compaion (0) | 2024.03.15 |
[Kotlin 공부] 시간 출력, 비교하기 (0) | 2024.03.13 |
[Kotlin 문법 종합] 스레드 활용 실습 (@ 수정하기) (0) | 2024.03.08 |
[Kotlin 문법 종합] - 쓰레드, 코루틴 (# 추가하기) (0) | 2024.03.06 |