728x90
안녕하세요! 이번 포스트에서는 #으로 시작하는 태그를 추출하는 기능을 만들어보겠습니다.
환경: android sdk 28, viewBinding 사용
먼저 간단한 레이아웃을 만듭니다.
activity_find_tag.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
tools:context=".FindTagActivity">
<EditText
android:id="@+id/edt"
android:layout_width="300dp"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="30dp"
android:text="태그 추출하기" />
<TextView
android:id="@+id/tv"
android:layout_width="300dp"
android:layout_height="wrap_content" />
</LinearLayout>
다음으로 텍스트에서 태그를 추출해 태그들을 반환하는 getTags()를 만들어보겠습니다.
스틱코드로 간편하게 메소드를 구현할 수 있습니다.
private fun getTags(text: String): Sequence<MatchResult> {
val pattern = """#([^#\s]+)""" // 태그 추출 정규식
val regex = pattern.toRegex()
val matches = regex.findAll(text)
return matches
}
버튼을 눌렀을 때 태그 추출이 되도록 합니다.
val binding = ActivityFindTagBinding.inflate(layoutInflater)
binding.btn.setOnClickListener {
val tags = getTags(binding.edt.text.toString())
var result = ""
tags.forEach { tag ->
result += "${tag.value} "
}
if (result == "") result = "태그가 없습니다"
binding.tv.text = result
}
액티비티의 전체 코드는 다음과 같습니다.
FindTagActivity.kt
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.stickode.databinding.ActivityFindTagBinding
class FindTagActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityFindTagBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.btn.setOnClickListener {
val tags = getTags(binding.edt.text.toString())
var result = ""
tags.forEach { tag ->
result += "${tag.value} "
}
if (result == "") result = "태그가 없습니다"
binding.tv.text = result
}
}
private fun getTags(text: String): Sequence<MatchResult> {
/*
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/-regex/
*/
val pattern = """#([^#\s]+)""" // 태그 추출 정규식
val regex = pattern.toRegex()
val matches = regex.findAll(text)
return matches
}
}
'안드로이드 코틀린' 카테고리의 다른 글
[Kotlin][Android] 기본으로 표시되는 툴바 커스텀하기 (0) | 2021.12.18 |
---|---|
[Kotlin][Android] TextInputLayout 사용하여 로그인 화면 만들기 (0) | 2021.12.15 |
[Kotlin][Android] 앨범 사진 이미지 뷰에 띄워주기 (0) | 2021.12.13 |
[Kotlin][Android] 카메라로 찍은 사진 이미지 뷰에 띄워주기 (6) | 2021.12.03 |
[Kotlin][Android] 네트워크 모니터링 기능 (0) | 2021.11.27 |