Kotlin - 문자열에서 숫자(int)만 추출하는 방법

String에서 Integer만 추출하는 방법을 소개합니다.

1. 정규표현식으로 Integer 추출

다음 코드는 정규표현식으로 Integer만 추출하는 코드입니다.

replace()에 정규표현식과 정규표현식에 해당하는 문자와 변경할 String을 전달합니다.

fun main(args: Array<String>){

    val str = "aaa1234, ^&*2233pp"

    val number = str.replace("[^0-9]".toRegex(), "")

    println(number)
}

Output:

12342233

"[^0-9]"는 0~9의 숫자가 아닌 문자열을 의미합니다.

따라서, 숫자가 아닌 문자들을 공백("")으로 변경하라는 의미입니다.

다음 코드도 위와 동일한 결과를 출력합니다. "[^\\d]""[^0-9]"의 축약형으로 의미가 동일합니다.

fun main(args: Array<String>){

    val str = "aaa1234, ^&*2233pp"

    val number = str.replace("[^\\d]".toRegex(), "")

    println(number)
}

Output:

12342233

2. 반복문으로 숫자 추출

다음 코드는 for문으로 숫자만 추출하는 코드입니다.

fun main(args: Array<String>){

    val str = "aaa1234, ^&*2233pp"

    var number: String? = ""
    for (ch in str) {
        if (ch.toInt() in 48..57) {
            number += ch
        }
    }

    println(number)
}

Output:

12342233

3. Stream으로 숫자 추출

다음 코드는 for를 사용하지 않고 Stream을 사용하여 숫자를 추출하였습니다.

import java.util.stream.Collectors

fun main(args: Array<String>){

    val str = "aaa1234, ^&*2233pp"

    val stream = str.chars()
    val intStr = stream.filter { ch: Int -> ch in 48..57 }
        .mapToObj { ch: Int -> ch.toChar() }
        .map { obj: Char -> obj.toString() }
        .collect(Collectors.joining())

    println(intStr)
}

Output:

12342233
Loading script...
codechachaCopyright ©2019 codechacha