[Android/안드로이드] detect a URL in a String / String 에서 URL 찾아내기

2020. 11. 30. 14:24Android/Android Tip

autolink 라이브러리도 사용해보고 이것 저것 시도를 해보다

http(s)://, www 모두다 없을 경우 url 로 인식하지 못하는 이슈가 있어 

찾고 찾다 Linkify 란 text util 을 찾게 되었다 

 

 

1. String 에 url 이 있는지 확인

/**
 * String 에 url 이 포함되어 있는지 확인하는 메소드
 * @return true > 링크 포함 , false > 링크 미포함
 */
fun String.isContainUrl(): Boolean {
    val spannableString = SpannableString.valueOf(this)
    return LinkifyCompat.addLinks(spannableString, Linkify.WEB_URLS)
}

 

2. (1.) 에서 true 를 return 받았을 경우 String 에서 url 을 추출

/**
 * url 이 포함된 String 에서 url 추출하는 메소드
 * @return url
 */
fun String.detectUrl(): String {
    val spannableString = SpannableString.valueOf(this)

    val matchFilter = Linkify.sUrlMatchFilter
    val pattern = Patterns.WEB_URL
    var url: String = ""
    val m = pattern.matcher(spannableString)
    while (m.find()) {
        val start = m.start()
        val end = m.end()
        if (matchFilter == null || matchFilter.acceptMatch(spannableString, start, end)) {
            url = spannableString.subSequence(start, end).toString()
        }
    }
    return url
}

 

위에 코드를 사용하면 http(s)://, www 가 없는 경우 즉, 

https://www.naver.com, www.naver.com, naver.com 모두 인식할 수 있다 

 

끝 

 

참조 : developer.android.com/reference/android/text/util/Linkify