pull/1771/head
kunfei 3 years ago
parent 968d9cff83
commit 8bfa1f227d
  1. 5
      app/src/main/java/io/legado/app/help/ContentProcessor.kt
  2. 24
      app/src/main/java/io/legado/app/utils/RegexExtensions.kt

@ -8,7 +8,6 @@ import io.legado.app.data.entities.BookChapter
import io.legado.app.data.entities.ReplaceRule
import io.legado.app.help.config.AppConfig
import io.legado.app.help.config.ReadBookConfig
import io.legado.app.utils.regexReplace
import io.legado.app.utils.toastOnUi
import splitties.init.appCtx
import java.lang.ref.WeakReference
@ -135,12 +134,12 @@ class ContentProcessor private constructor(
if (item.pattern.isNotEmpty()) {
kotlin.runCatching {
mContent = if (item.isRegex) {
mContent.regexReplace(item.pattern, item.replacement, 1000L)
mContent.replace(item.pattern.toRegex(), item.replacement)
} else {
mContent.replace(item.pattern, item.replacement)
}
}.onFailure {
AppLog.put("${item.name}替换出错\n${it.localizedMessage}")
AppLog.put("${item.name}替换出错\n${it.localizedMessage}", it)
appCtx.toastOnUi("${item.name}替换出错")
}
}

@ -1,24 +1,10 @@
package io.legado.app.utils
import io.legado.app.exception.NoStackTraceException
import java.util.regex.Pattern
import kotlinx.coroutines.suspendCancellableCoroutine
suspend fun CharSequence.regexReplace(regex: String, replacement: String, timeout: Long): String {
return suspendCancellableCoroutine {
fun CharSequence.regexReplace(regex: String, replacement: String, timeout: Long): String {
val timeEnd = System.currentTimeMillis() + timeout
val pattern = Pattern.compile(regex)
val matcher = pattern.matcher(this)
var result: Boolean = matcher.find()
if (result) {
val sb = StringBuffer()
do {
//matcher.appendReplacement(sb, replacement)
if (System.currentTimeMillis() > timeEnd) {
throw NoStackTraceException("替换超时")
}
result = matcher.find()
} while (result)
matcher.appendTail(sb)
return sb.toString()
}
return this.toString()
}

Loading…
Cancel
Save