pull/37/head
kunfei 6 years ago
parent f2c2046b75
commit 74ec2e0893
  1. 8
      app/build.gradle
  2. 7
      app/src/main/java/io/legado/app/help/BookHelp.kt
  3. 30
      app/src/main/java/io/legado/app/utils/DateUtils.kt
  4. 38
      app/src/main/java/io/legado/app/utils/StringExtensions.kt

@ -86,13 +86,13 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
//androidX
implementation 'androidx.core:core-ktx:1.2.0-alpha04'
implementation 'androidx.core:core-ktx:1.2.0-beta01'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.media:media:1.1.0'
implementation 'androidx.preference:preference:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'
implementation 'androidx.viewpager2:viewpager2:1.0.0-beta04'
implementation 'androidx.viewpager2:viewpager2:1.0.0-beta05'
implementation 'com.google.android.material:material:1.1.0-beta01'
implementation 'com.google.android:flexbox:1.1.0'
@ -102,7 +102,7 @@ dependencies {
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
//room
def room_version = '2.1.0'
def room_version = '2.2.0'
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
@ -148,4 +148,6 @@ dependencies {
//
implementation 'com.jaredrummler:colorpicker:1.1.0'
implementation 'org.apache.commons:commons-lang3:3.9'
implementation 'org.apache.commons:commons-text:1.8'
}

@ -6,7 +6,7 @@ import io.legado.app.data.entities.BookChapter
import io.legado.app.data.entities.ReplaceRule
import io.legado.app.utils.getPrefInt
import io.legado.app.utils.getPrefString
import io.legado.app.utils.similarity
import org.apache.commons.text.similarity.JaccardSimilarity
import java.io.File
import kotlin.math.max
import kotlin.math.min
@ -94,13 +94,14 @@ object BookHelp {
if (chapters.size > index && title == chapters[index].title) {
return index
}
var similarity = 0F
var similarity = 0.0
var newIndex = index
val start = max(index - 20, 0)
val end = min(index + 20, chapters.lastIndex)
val jaccardSimilarity = JaccardSimilarity()
if (start < end) {
for (i in start..end) {
val s = title.similarity(chapters[i].title)
val s = jaccardSimilarity.apply(title, chapters[i].title)
if (s > similarity) {
similarity = s
newIndex = i

@ -1,30 +0,0 @@
package io.legado.app.utils
import android.annotation.SuppressLint
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
object DateUtils {
/**
* @Description: 任意时间字符串转换成时间无需指定解析模板
* */
@SuppressLint("SimpleDateFormat")
@Throws(ParseException::class)
fun parseStringToDate(date: String): Date {
val result: Date
var parse = date.replaceFirst("[0-9]{4}([^0-9]?)".toRegex(), "yyyy$1")
parse = parse.replaceFirst("^[0-9]{2}([^0-9]?)".toRegex(), "yy$1")
parse = parse.replaceFirst("([^0-9]?)[0-9]{1,2}([^0-9]?)".toRegex(), "$1MM$2")
parse = parse.replaceFirst("([^0-9]?)[0-9]{1,2}( ?)".toRegex(), "$1dd$2")
parse = parse.replaceFirst("( )[0-9]{1,2}([^0-9]?)".toRegex(), "$1HH$2")
parse = parse.replaceFirst("([^0-9]?)[0-9]{1,2}([^0-9]?)".toRegex(), "$1mm$2")
parse = parse.replaceFirst("([^0-9]?)[0-9]{1,2}([^0-9]?)".toRegex(), "$1ss$2")
val format = SimpleDateFormat(parse)
result = format.parse(date)
return result
}
}

@ -1,7 +1,5 @@
package io.legado.app.utils
import kotlin.math.min
// import org.apache.commons.text.StringEscapeUtils
fun String?.safeTrim() = if (this.isNullOrBlank()) null else this.trim()
@ -47,39 +45,3 @@ fun String.startWithIgnoreCase(start: String): Boolean {
return if (this.isBlank()) false else startsWith(start, true)
}
/**
* 计算相似度
*/
fun String.similarity(target: String): Float {
//计算两个字符串的长度。
val len1 = this.length
val len2 = target.length
//建立上面说的数组,比字符长度大一个空间
val dif = Array(len1 + 1) { IntArray(len2 + 1) }
//赋初值,步骤B。
for (a in 0..len1) {
dif[a][0] = a
}
for (a in 0..len2) {
dif[0][a] = a
}
//计算两个字符是否一样,计算左上的值
var temp: Int
for (i in 1..len1) {
for (j in 1..len2) {
temp = if (this[i - 1] == target[j - 1]) {
0
} else {
1
}
//取三个值中最小的
dif[i][j] = min(
min(dif[i - 1][j - 1] + temp, dif[i][j - 1] + 1),
dif[i - 1][j] + 1
)
}
}
//计算相似度
return 1 - dif[len1][len2].toFloat() / Math.max(length, target.length)
}

Loading…
Cancel
Save