Resumen resumen de Kotlin

Tabla de contenido

1. Búsqueda de cadenas

2. Intercepción de cuerdas

3. Reemplazo de cuerdas

Cuarto, segmentación de cadenas

5. Otros

Seis, extensión de Kotlin

6.1 La búsqueda de caracteres está implementada por defecto

 6.2 Implementación usando la extensión kotlin

6.3 Llamada 

7. Resumen


1. Búsqueda de cadenas

En el desarrollo real de la función de búsqueda de cadenas, solo se utilizan unas pocas funciones simples. Aquí solo explico algunas de las más utilizadas.

1.1 Obtener el primer elemento

Contiene principalmente first()| firstOrNull()y first{}| firstOrNull{}cuatro funciones

first()|firstOrNull()

  • Función: Encuentra el primer elemento de una cadena
  • Diferencia: si la cadena es una cadena vacía, la primera generará NoSuchElementExceptionuna excepción y la última devolveránull

ejemplo:

val str = "kotlin very good"// 如果字符串为空串时,会抛出NoSuchElementException异常
str.first()   <=>   str[0]   <=>   str.get(0)// 如果字符串为空串时,会返回nullstr.firstOrNull()

first{}|firstOrNull{}

  • Función: Encuentra el primer elemento igual a un carácter determinado
  • Diferencia: no se encuentra ningún elemento que cumpla la condición, el primero arrojará NoSuchElementExceptionuna excepción y el segundo regresaránull

ejemplo:

val str = "kotlin very good"// 如果未查找到满足条件的元素,会抛出NoSuchElementException异常
str.first{ it == 'o' } // 如果未查找到满足条件的元素,会返回nullstr.firstOrNull
{ it == 'o' } 

1.2 Obtener el último elemento

Incluye principalmente cuatro funciones de first(), firstOrNull()y first{}yfirstOrNull{}

last()ylastOrNull()

  • Función: Encuentra el último elemento de una cadena
  • Diferencia: si la cadena es una cadena vacía, la primera generará NoSuchElementExceptionuna excepción y la última devolveránull

ejemplo:

val str = "kotlin very good"// 如果字符串为空串时,会抛出NoSuchElementException异常
// 其中 lastIndex 是一个拓展属性,其实现是
length - 1str.last()   <==>   str.get(lastIndex)   <==>  str[lastIndex]// 如果字符串为空串时,会返回nullstr.lastOrNull()

last{}ylastOrNull{}

  • Función: Encuentra el último elemento igual a un carácter determinado
  • Diferencia: no se encuentra ningún elemento que cumpla la condición, el primero arrojará NoSuchElementExceptionuna excepción y el segundo regresaránull

ejemplo:

val str = "kotlin very good"// 如果未查找到满足条件的元素,会抛出NoSuchElementException异常
// 其实从源码中我们发现其是对原字符串反转之后再进行遍历查找满足条件的元素。这样遍历的次数就减少了
str.last{ it == 'o' } // 如果未查找到满足条件的元素,会返回nullstr.lastOrNull{ it == 'o' } 

1.3 Buscar elementos

1.3.2, find{} | findLast{}
en realidad proporciona dos funciones de orden superior para encontrar elementos find{}, findLast{}. Sin embargo, sus partes internas son todas las llamadas firstOrNull()y lastOrNull()funciones para el procesamiento. No hay mucho que decir aquí.

1.3.2 Encuentra el subíndice del elemento correspondiente

  • indexOf(): Encuentra el primer subíndice de un elemento o cadena en la cadena original.
  • indexLastOf(): busque el subíndice de la última aparición de un elemento o cadena en la cadena original.
  • indexOfFirst{}: mismoindexOf()
  • indexOfLast{}: mismoindexLastOf()

ejemplo:

val str = "kotlin very good"
println(str.indexOfFirst { it == 'o' })
println(str.indexOfLast { it == 'o' })
println(str.indexOf('o',0))
println(str.indexOf("very",0))
println(str.lastIndexOf('o'))
println(str.lastIndexOf("good"))

La salida es:

114171412

2. Intercepción de cuerdas

Si tienes Javao base de programación en otros lenguajes. Creo que debería estar familiarizado con la interceptación de cadenas. Puede continuar mirando hacia abajo, como una consolidación de la intercepción de cuerdas. Por supuesto, también puede omitir esta sección directamente, porque en Kotlin, la función de interceptación de cadenas subString()es llamar a la función Javaen subString().

Además Kotlinde subString()las funciones de llamada, también puede llamar a subSequence()las funciones. Los amigos que estén interesados ​​​​pueden ir a ver el código fuente.

2.1 subString()Intersección con función

Echemos un vistazo al subString()código fuente de la función.

@kotlin.internal.InlineOnly
public inline fun String.substring(startIndex: Int): String = (this as java.lang.String).substring(startIndex)
@kotlin.internal.InlineOnly
public inline fun String.substring(startIndex: Int, endIndex: Int): String = (this as java.lang.String).substring(startIndex, endIndex)
public fun String.substring(range: IntRange): String = substring(range.start, range.endInclusive + 1)

Desde el código fuente anterior, podemos ver que Kotlinse utiliza la función JavaensubString()

en:

  • startIndexParámetros: el subíndice de inicio de la cadena interceptada
  • endIndexParámetro: el subíndice final de la cadena interceptada
  • rangParámetro, se refiere a un IntRangtipo, que representa un rango

Ejemplo:

val str = "Kotlin is a very good programming language"
println("s = ${str.substring(10)}")  // 当只有开始下标时,结束下标为length - 1
println(str.substring(0,15))println(str.substring(IntRange(0,15)))

La salida es:

a very good programming languageKotlin is a verKotlin is a very

Aviso:

  • La diferencia entre usar subString(startIndex,endIndex)y subString(rang)cuando. Se puede ver a partir de los resultados anteriores combinados con el código fuente.
  • Tenga en cuenta el caso de subíndice fuera de los límites. eso es StringIndexOutOfBoundsExceptionanormal

2.2 subSequence()Intersección con función

Además de usar la cadena de intercepción Kotlinexplicada anteriormente , también puede usar la función de intercepción.subString()subSequence()

Echemos un vistazo a su implementación fuente:

public fun subSequence(startIndex: Int, endIndex: Int): CharSequence
public fun CharSequence.subSequence(range: IntRange): CharSequence = subSequence(range.start, range.endInclusive + 1)

Desde el código fuente, podemos ver que es más o menos lo subString()mismo que una función, pero no solo proporciona startIndextransferencia.

Ejemplo:

val str = "Kotlin is a very good programming language"
println(str.subSequence(0,15))
println(str.subSequence(IntRange(0,15)))

La salida es:

Kotlin is a verKotlin is a very

3. Reemplazo de cuerdas

Al igual que con el truncamiento de cadenas anterior, puede omitir esta sección si tiene experiencia en programación. Sin embargo, para la función de reemplazo de cadenas, además de la función ha en Kotlinla implementación , también proporciona otras funciones como , , , , etc. El significado de estas funciones se explicará con ejemplos a continuación.Javareplace()replaceFirst()replaceAfter()replaceBefore()replaceIndent()

3.1, función reemplazar ()

replace()La función proporciona 4 funciones sobrecargadas. Pueden realizar diferentes funciones.

3.1.1, reemplazar (oldChar, newChar, ignoreCase = falso)

Función: reemplaza todos los caracteres de la cadena original con nuevos caracteres. luego devuelve la nueva cadena

  • oldChar: El caracter a ser reemplazado
  • newChar: nuevo personaje
  • ignoreCase: Si hacer referencia a la función Javaen replace(). El valor predeterminado es la función falselista para Javausarreplace()

ejemplo:

// 把字符`a`全部替换为`A`
val str = "Kotlin is a very good programming language"
println(str.replace('a','A'))

La salida es:

Kotlin is A very good progrAmming lAnguAge

3.1.2, reemplazar (valor antiguo, valor nuevo, caso ignorado = falso)

Función: reemplaza todos los caracteres de la cadena original con nuevos caracteres. luego devuelve la nueva cadena

  • oldValue: la cadena a ser reemplazada
  • newValue: nueva cadena
  • ignoreCase: Si hacer referencia a la función Javaen replace(). El valor predeterminado es la función falselista para Javausarreplace()

ejemplo:

// 把字符串`Kotlin`替换成字符串`Java`val str = "Kotlin is a very good programming language"
println(str.replace("Kotlin","Java"))

La salida es:

Java is a very good programming language

3.1.3, reemplazar (regex, reemplazo)

Función: haga coincidir la cadena de origen de acuerdo con las reglas regulares definidas y reemplace las cadenas que cumplen con las reglas con cadenas nuevas.

  • regex: expresión regular
  • replacement: nueva cadena

ejemplo:

// 正则的规则为检测数字,如果为数字则替换成字符串`
kotlin`val str = "1234a kotlin 5678 3 is 4"
println(str.replace(Regex("[0-9]+"),"kotlin"))

La salida es:

kotlina kotlin kotlin kotlin is kotlin

3.1.4, reemplazar (regex: Regex, noinline transform: (MatchResult) -> CharSequence)

  • Función: haga coincidir la cadena de origen de acuerdo con las reglas regulares definidas y transform{}reemplace las cadenas que satisfacen las reglas con nuevas cadenas asignadas por funciones de orden superior.
  • regex: expresión regular
  • transform: función de orden superior

ejemplo:

val str = "1234a kotlin 5678 3 is 4"
val newStr = str.replace(Regex("[0-9]+"),{"abcd "})

La salida es:

abcd abcd abcd abcd a kotlin abcd abcd abcd abcd  abcd  is abcd

Puede ver la diferencia entre las dos funciones de las dos funciones anteriores. Puede leer la información por su cuenta para comprender los puntos de conocimiento 高阶函数sobre . 正则表达式Xiaosheng agregará contenido relevante en capítulos posteriores...

Después de la explicación de la replace()función anterior. Y se analizan varias funciones sobrecargadas. Creo que todos replace()tienen una comprensión general de los parámetros en la función. Y las siguientes funciones son aproximadamente la misma operación. Por lo tanto, en las siguientes operaciones de funciones, solo ilustraré sus funciones con ejemplos. La introducción de los parámetros no se estudiará en detalle.

3.2, reemplazarPrimero()

Función: reemplaza el primer carácter o cadena que cumple la condición con un nuevo carácter o cadena

ejemplo:

val str = "Kotlin is a very good programming language"
println(str.replaceFirst('a','A'))
println(str.replaceFirst( "Kotlin","Java"))

La salida es:

Kotlin is A very good programming languageJava is a very good programming language

3.3, reemplazar antes ()

Función: Interceptar el primer carácter que cumple la condición o la cadena después de la cadena, incluido el carácter que cumple la condición o la propia cadena, y agregar una nueva cadena delante de él.

ejemplo:

val str = "Kotlin is a very good programming language"
println(str.replaceBefore('a',"AA"))
println(str.replaceBefore("Kotlin","Java"))

La salida es:

AAa very good programming languageJavaKotlin is a very good programming language

3.4, reemplazar antes del último ()

Función: Interceptar el último carácter que cumple la condición o la cadena después de la cadena, incluido el carácter que cumple la condición o la propia cadena, y agregar una nueva cadena delante de él.

ejemplo:

val str = "Kotlin is a very good programming language"
println(str.replaceBeforeLast('a',"AA"))
println(str.replaceBeforeLast("Kotlin","Java"))

La salida es:

AAageJavaKotlin is a very good programming language

3.5, reemplazarDespués()

Función: interceptar el primer carácter que cumple la condición o la cadena delante de la cadena, incluido el carácter que cumple la condición o la propia cadena, y agregar una nueva cadena después.

ejemplo:

val str = "Kotlin is a very good programming language"
println(str.replaceAfter('a',"AA"))
println(str.replaceAfter("Kotlin","Java"))

La salida es:

Kotlin is aAAKotlinJava

3.6, reemplazar después del último ()

Función: interceptar el último carácter que cumple la condición o la cadena anterior a la cadena, incluido el carácter o la cadena en sí que cumple la condición, y agregar una nueva cadena después.

ejemplo:

val str = "Kotlin is a very good programming language"
println(str.replaceAfterLast('a',"AA"))
println(str.replaceAfterLast("Kotlin","Java"))

La salida es:

Kotlin is a very good programming languaAAKotlinJava

Cuarto, segmentación de cadenas

Como en la sección anterior, además de las funciones en Kotlinla implementación , se proporcionan funciones para dividir cadenas. Después de que la división sea exitosa, se devolverá una colección de cadenas para nuestras operaciones posteriores.Javasplit()splitToSequence()

4.1, división ()

split()La función también proporciona 4una función sobrecargada. Entre ellos, usar una expresión regular como división condicional ocupa dos. Dividir con personajes para ocupar uno. Dividir con una cuerda ocupa uno.

4.1.1 Usar expresiones regulares para dividir

KotlinPara usar una expresión regular en , está usando una clase Regexy Javapara usar una expresión regular en , está usando Patternuna clase. Aquí hay ejemplos

ejemplo:

var str2 = "1 kotlin 2 java 3 Lua 4 JavaScript"
val list3 = str2.split(Regex("[0-9]+"))
for (str in list3){   
print("$str \t")
}
println()
val list4 = str2.split(Pattern.compile("[0-9]+"))
for (str in list4){    
print("$str \t")
}

La salida es:

kotlin  java  Lua  JavaScript     kotlin  java  Lua  JavaScript     

4.1.2, use caracteres o cadenas para dividir

En el desarrollo de proyectos reales, este método se usa con más frecuencia. Sin embargo, vale la pena señalar aquí que ya sea que esté dividido por caracteres o por cadenas, es un parámetro variable. Es decir, el número de sus parámetros es indefinido.

ejemplo:

val str1 = "Kotlin is a very good programming language"
val list1 = str1.split(' ')
for (str in list1)
{   
print("$str \t")
}
println()
val list2 = str1.split(" ")
for (str in list2)
{   
print("$str \t")
}

La salida es:

Kotlin   is   a   very     good    programming     languageKotlin   is   a   very     good    programming     language

Aquí hay un ejemplo de un caso de parámetro variable:

val str3 = "a b c d e f g h 2+3+4+5"val list5 = str3.split(' ','+')for (str in list5){    print("$str \t")}

La salida es:

a     b   c   d   e   f   g   h   2   3   4   5 

4.2, dividir en secuencia ()

Esta función también se puede dividir por cadena o carácter, y su uso es el mismo que el de la split()función anterior. No hay mucho que decir aquí...

5. Otros

Además de los puntos explicados anteriormente, hay muchos procesos de uso común, como detectar si la cadena es una cadena vacía, obtener la longitud de la cadena, invertir la cadena, contar, convertir la matriz de caracteres, obtener el nullcarácter del subíndice especificado, etc.

5.1 Obtener la longitud de la cadena

Hay Kotlindos formas de obtener la longitud de una cadena en . en realidad es solo uno

  1. Obtener la longitud directamente con lengthel atributo
  2. Consíguelo con count()una función De hecho, count()el método de la función también devuelve lengthla longitud.

Ejemplo:

val str = "kotlin very good"// 1. 直接用length属性获取println("str.length => ${str.length}")// 2. 用count()函数获取println("str.count() => ${str.count()}")

La salida es:

str.length => 16str.count() => 16

Aquí echamos un vistazo al count()código fuente de la función.

/** * Returns the length of this char sequence. * 其实也就是返回了length属性... */
@kotlin.internal.InlineOnly
public inline fun CharSequence.count(): Int 
{    
return length
}

5.2 Estadísticas de caracteres repetidos

La función mencionada anteriormente count()es devolver lengthla longitud del atributo para obtener la cadena. De hecho, el código fuente también proporciona una count{}función de orden superior llamada , que se usa para contar el número de caracteres repetidos en una cadena.

/*  count{}函数源码    该函数接受一个`Boolean`类型的`Lambda`表达式。然后循环这个字符串,如果我的条件成立,则变量`count`自增。  循环完成之后返回重复的个数`count` */
public inline fun CharSequence.count(predicate: (Char) -> Boolean): Int 
{ 
var count = 0  
for (element in this)
if (predicate(element)) count++    
return count
}

Ejemplo:

val str = "kotlin very good"
val count = str.count
{ it == 'o' }
println("count : $count")

La salida es:

count : 3

5.3, Cadena de verificación

En el desarrollo real, especialmente en Androidel desarrollo, a menudo se encuentra al verificar si el contenido del cuadro de entrada es una cadena vacía. En Kotlin, como en , Javase proporcionan varias funciones para manejar esta situación.

Todas las siguientes funciones manejan cadenas que están vacías o vacías:

  • isEmpty(): Su código fuente es para juzgar si es lengthigual 0, si es igual 0, regresará true, de lo contrario regresará false. No se puede usar directamente con cadenas anulables
  • isNotEmpty()length: Su código fuente es para juzgar si es mayor que 0, si es mayor que , 0volver true, de lo contrario volver false. No se puede usar directamente con cadenas anulables
  • isNullOrEmpty(): Su código fuente es para juzgar si la cadena es o si nulles igual a .length0
  • isBlank()length: Su código fuente es para juzgar si es igual 0o para juzgar si el número de espacios que contiene es igual al actual length. No se puede usar directamente con cadenas anulables
  • isNotBlank(): Su código fuente es para isBlank()invertir la función. No se puede usar directamente con cadenas anulables
  • isNotOrBlank(): Su código fuente juzga si la cadena es null. o llamar isBlank()a la función

Ejemplo:

val str : String? = "kotlin"
/*   可以看出当str为可空变量的时候,isNullOrEmpty()和isNotOrBlank()可以不做直接调用而不做任何处理  ,而其他的函行 */
str?.isEmpty()          
falsestr?.isNotEmpty()        
truestr.isNullOrEmpty()       
falsestr?.isBlank()           
falsestr?.isNotBlank()      
truestr.isNullOrBlank()       //false

5.4, ​​concatenación de cadenas

Los enlaces de cadena Javasolo se pueden usar +para enlazar, excepto, por StringBuilder、StringBuffersupuesto. Además Kotlinde usar funciones +, también puede usar plus()funciones. Acepta cualquier tipo. plus()función es una función sobrecargada del operador.
Ejemplo de explicación:

val oldStr = "kotlin"
println(oldStr.plus(" very good"))
println(oldStr + " very good")

La salida es:

kotlin very goodkotlin very good

5.5, inversión de cuerdas

Al igual que los arreglos, las cadenas pueden tener sus elementos invertidos. Simplemente use reversed()la función directamente.

ejemplo:

val str = "kotlin"println("字符串反转:${str.reversed()}")

Resultado de salida:

字符串反转:niltok

5.6 Determinar el inicio y el final de una cadena

5.6.1, comienza con()

Función: juzgar si su cadena comienza con un determinado carácter o cadena.

  • char: carácter inicial
  • prefix: cadena inicial
  • ignoreCase: si llamar Javaa esta función. El valor predeterminado esfalse
  • startIndex: Posición de salida

ejemplo:

val str = "kotlin"    
println(str.startsWith('k'))         // 是否有字符`k`起始   
println(str.startsWith("Kot"))       // 是否由字符串`kot`起始  
println(str.startsWith("lin",3))     // 当起始位置为3时,是否由字符串`lin`起始

La salida es:

truetruetrue

5.6.2, termina con()

Función: juzgar si la cadena termina con un determinado carácter o cadena.

  • char: personaje final
  • suffix: cadena final
  • ignoreCase: si llamar Javaa esta función. El valor predeterminado esfalse

ejemplo:

val str = "kotlin"println(str.endsWith("lin"))  // 是否由字符串`lin`结尾
println(str.endsWith('n'))    // 是否由字符`n`结尾复制代码

La salida es:

truetrue

Seis, extensión de Kotlin

6.1 La búsqueda de caracteres está implementada por defecto

object StringUtil { 
 fun lettersCount(str: String): Int { 
 var count = 0 
 for (char in str) { 
 if (char.isLetter()) { 
 count++ 
 } 
 } 
 return count 
 } 
}

 6.2 Implementación usando la extensión kotlin

fun String.lettersCount(): Int { 
 var count = 0 
 for (char in this) { 
 if (char.isLetter()) { 
 count++ 
 } 
 } 
 return count 
} 

6.3 Llamada 

val count = "ABC123xyz!@#".lettersCount() 

 

7. Resumen

En el desarrollo real, hay muchas situaciones en las que se procesan y utilizan cadenas. Especialmente el procesamiento de verificación, reemplazo, segmentación e interceptación de cadenas. Es por eso que resolví estos puntos de conocimiento. Estos puntos de conocimiento son muy básicos, pero también se usan con mucha frecuencia. Si tienes experiencia en programación, debes consolidar los conocimientos básicos de cadenas.

Supongo que te gusta

Origin blog.csdn.net/qq_41264674/article/details/130107826
Recomendado
Clasificación