본문 바로가기
개발

String 관련 함수 정리

by 준그래머 2021. 3. 5.
반응형

문자열을 사용할 때 알아두면 유용한 method에 대해 정리해보려 한다.

 

contentEquals() : Boolean

CASE 1) String 문자열과 contentEquals()의 괄호 안의 문자열 비교

val str:String = "I like Apple."
var contentEquals:Boolean = str.contentEquals("I like Apple.")

 

CASE 2) String 문자열끼리 비교

val str:String = "I like Apple."
var str2:String = "I like Apple."
var contentEquals:Boolean = str.contentEquals(str2)

 

CASE 3) String 문자열과 StringBuffer의 문자열을 비교

val str:String = "I like Apple."
val sb:StringBuffer = StringBuffer("I like Apple.")
var contentEquals:Boolean = str.contentEquals(sb)

contentEquals() vs equals()

contentEquals는 문자열의 내용만 비교하기 때문에 String객체를 StringBuffer, StringBuilder 등과 비교 가능

eqauls는 String 타입인지 확인도 하기 때문에 String객체만 비교 가능 ( toString() 쓰면 거의 다 사용 가능...)

 

 

trimMargin() : String

CASE 1) 기존의 문자열

fun main() {
    val rapunzel = """This is the Story/n of how I died
       	/nDon't worry, this is actually a very fun story.
        /nAnd the truth is, it isn't even mine.
        /nThis is the story of a girl named, Rapunzel.
    """
    
    println(rapunzel.trimMargin("/n"))
    
// This is the Story/n of how I died
// Don't worry, this is actually a very fun story.
// And the truth is, it isn't even mine.
// This is the story of a girl named, Rapunzel.    
    
    val rapunzel2 = """This is the Story of how I died
       	Don't worry, this is actually a very fun story.
        And the truth is, it isn't even mine.
        This is the story of a girl named, Rapunzel.
    """
    
    println(rapunzel2)
    
// This is the Story of how I died
//        	Don't worry, this is actually a very fun story.
//         And the truth is, it isn't even mine.
//         This is the story of a girl named, Rapunzel.
}

trimMargin()은 특정 문자가 문장의 맨 앞에 들어오는 경우 문자열의 문자열의 맨 앞 공백을 제거하고 줄 바꿈 시켜주는 함수이다.

위 문자열을 보면 2~4번째 줄을 보면 맨 앞 글자에 "/n"이 입력되어 있다. trimMargin("/n")을 통해 줄 바꿈을 해주는 걸 확인할 수 있다. 또한 1번째 줄을 보면 가장 앞에 "/n"온 것이 아니기 때문에 줄 바꿈이 일어나지 않은 것을 확인할 수 있다. (주의할 점은 대소문자 구분이 필요하다.)

 

 

contains() : Boolean

CASE 1) 특정 문자열 객체끼리 비교

fun main() {
	val str: String = "I like Apple."
	var fruit: String = "Apple"
	val contains:Boolean = str.contains(fruit)
    
    println(contains)
// true
}

 

CASE 2) 문자열을 포함하는지 확인 (대소문자 구분 제거)

fun main() {
	val str: String = "I like Apple."
	var fruit: String = "Apple"
	val contains:Boolean = str.contains("apple", true)
    
    println(contains)
// true
}

contains("문자열", true)처럼 입력하면 대소문자 구분 없이 포함관계를 확인한다.

 

 

toUpperCase(), toLowerCase() : String

fun main() {
    val str: String = "I like Apple."
    var upperString = str.toUpperCase()
    var lowerString = str.toLowerCase()

    println(str)
//	I like Apple.

    println(upperString)
//	I LIKE APPLE.
    
    println(lowerString)
//	i like apple.
}

 

 

subSequence() : charSequence

fun main() {

	val str: String = "I like Apple."
	val testSequence = str.subSequence(0, 6)
    
    println(testSequence)
    println(str.javaClass.name)
    println(testSequence.javaClass.name)
    
// I like
// java.lang.String
// java.lang.String
}

subSequence()는 기본적으로 substring()처럼 문자열을 인덱스 값에 맞춰 자르는 데 사용한다. 다만 차이점은 subSequence()는 CharSequence라는 인터페이스 타입으로 반환해줘서 testSequence 상수를 String타입으로 선언하면 에러가 발생한다. 그런데 신기하게 println()으로 타입을 찍어보면 String으로 나오는데, 이유를 아직 모르겠다...

 

 

 

반응형