| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package eu.kanade.tachiyomi.util.lang
- import net.greypanther.natsort.CaseInsensitiveSimpleNaturalComparator
- import kotlin.math.floor
- /**
- * Replaces the given string to have at most [count] characters using [replacement] at its end.
- * If [replacement] is longer than [count] an exception will be thrown when `length > count`.
- */
- fun String.chop(count: Int, replacement: String = "…"): String {
- return if (length > count) {
- take(count - replacement.length) + replacement
- } else {
- this
- }
- }
- /**
- * Replaces the given string to have at most [count] characters using [replacement] near the center.
- * If [replacement] is longer than [count] an exception will be thrown when `length > count`.
- */
- fun String.truncateCenter(count: Int, replacement: String = "..."): String {
- if (length <= count) {
- return this
- }
- val pieceLength: Int = floor((count - replacement.length).div(2.0)).toInt()
- return "${take(pieceLength)}$replacement${takeLast(pieceLength)}"
- }
- /**
- * Case-insensitive natural comparator for strings.
- */
- fun String.compareToCaseInsensitiveNaturalOrder(other: String): Int {
- val comparator = CaseInsensitiveSimpleNaturalComparator.getInstance<String>()
- return comparator.compare(this, other)
- }
- /**
- * Returns the size of the string as the number of bytes.
- */
- fun String.byteSize(): Int {
- return toByteArray(Charsets.UTF_8).size
- }
- /**
- * Returns a string containing the first [n] bytes from this string, or the entire string if this
- * string is shorter.
- */
- fun String.takeBytes(n: Int): String {
- val bytes = toByteArray(Charsets.UTF_8)
- return if (bytes.size <= n) {
- this
- } else {
- bytes.decodeToString(endIndex = n).replace("\uFFFD", "")
- }
- }
|