Shakil Karim
08/14/2021, 11:09 AMtry catch
in Composable function? Code in 🧵Shakil Karim
08/14/2021, 11:10 AM@Composable
fun String.toAnnotatedString(): AnnotatedString? {
return try {
val pattern = Pattern.compile("\\*\\*(.*?)\\*\\*")
val matcher = pattern.matcher(this)
val sb = StringBuffer()
val stringBuilder = AnnotatedString.Builder()
while (matcher.find()) {
sb.setLength(0)
val group = matcher.group()
val spanText = group.substring(2, group.length - 2)
matcher.appendReplacement(sb, spanText)
stringBuilder.append(sb.toString())
val start = stringBuilder.length - spanText.length
stringBuilder.addStyle(SpanStyle(color = MaterialTheme.colors.secondary),start = start,end = stringBuilder.length)
}
sb.setLength(0)
matcher.appendTail(sb)
stringBuilder.append(sb.toString())
stringBuilder.toAnnotatedString()
}catch (ex: Exception) {
null
}
}
Dominaezzz
08/14/2021, 11:11 AMDominaezzz
08/14/2021, 11:11 AMMaterialTheme
.Shakil Karim
08/14/2021, 11:11 AMDominaezzz
08/14/2021, 11:12 AMMaterialTheme.colors.secondary
outside the try catch.Dominaezzz
08/14/2021, 11:13 AMStringBuilder
over StringBuffer
. StringBuffer
is for multi-threaded use so it'll be slower.Shakil Karim
08/14/2021, 11:15 AMShakil Karim
08/14/2021, 11:20 AMappendTail
method expects StringBufferDominaezzz
08/14/2021, 11:21 AMStringBuilder
Anton Popov
06/06/2022, 1:49 PM