charSequence는 문자 클래스들이 기본적으로 가지는 인터페이스이다. (sequence라고 해서 진짜 상속하진 않음)
이 인터페이스는 하나의 프로퍼티와 두 개의 멤버함수를 가진다
length : 문자열의 길이를 int로 반환
get(index) : 해당 인덱스의 문자열 하나를 char로 반환
subSequence (startIndex, endIndex) : 첫 매개변수 인덱스와 마지막 매개변수 인덱스 사이(-1) 구간의 문자열을 뽑아 새 문자열로 반환
package charSequenceEx
fun main() {
var seq : CharSequence = "Hello"
println("length : ${seq.length}")
println("get : ${seq.get(1)}")
println("subSequence : ${seq.subSequence(1,3)}")
}
결과 :
length : 5
get : e
subSequence : el
charSequence는 겉보기엔 별거 아닌거 같은 인터페이스지만 확장함수를 이용하면 유용하다.
trim함수가 있다.
package charSequenceEx
fun main() {
val str = " hello "
println(str.removeRange(0,5))
println(str.padStart(20, '*'))
println(str.padEnd(17, '*'))
println(str.trimStart())
println(str.trimEnd())
println(str.trim())
println(str.slice(4..6))
println(str.subSequence(4..6))
println(str.substring(4..6))
println(str.reversed())
}
removeRange : 첫번째 매개변수는 지울 시작지점을 의미한다. 두번째 매개변수는 지울 갯수를 의미한다.
padStart : 빈 공간의 시작을 두번째 매개변수로 채워, 첫번째 매개변수의 수까지 글자로 채운다.
padStart : 빈 공간의 끝을 두번째 매개변수로 채워, 첫번째 매개변수의 수까지 글자로 채운다.
trimStart : 문자열의 시작에 있는 공백을 삭제한다
trimEnd : 문자열의 끝에 있는 공백을 삭제한다
trim : 문자열 양 옆의 공백을 삭제한다.
slice, subSequence, substring : 지정된 범위 내의 글을 잘라 반환한다. slice와 subSequence는 CharSequence로 반환하고 substring은 string 타입으로 반환한다.
reverse : 문자열을 거꾸로 뒤집어 반환한다.
결과 :
o
************* hello
hello **********
hello
hello
hello
lo
lo
lo
olleh
제거뿐만 아니라 CharSequence를 나눌수도 있다.
package charSequenceEx
fun main() {
val hello : CharSequence = "안녕하세요.\n고맙습니다.\n반갑습니다."
val time : CharSequence = "2020-12-29"
println(hello.lines())
for (line in hello.lineSequence()) {
println(line)
}
println(time.split('-'))
}
lines : \n을 기준으로 나누어 배열로 반환
lineSequence : \n을 기준으로 나누어 Sequence 타입으로 반환
split : 첫번째 매개변수로 받은 문자열을 기준으로 CharSequence를 쪼개어 배열로 반환
결과 :
[안녕하세요., 고맙습니다., 반갑습니다.]
안녕하세요.
고맙습니다.
반갑습니다.
[2020, 12, 29]