Table des matières
Quatrièmement, la segmentation des chaînes
6.1. La recherche de caractères est implémentée par défaut
6.2. Implémentation à l'aide de l'extension kotlin
1. Recherche de chaînes
Dans le développement proprement dit de la fonction de recherche de chaînes, seules quelques fonctions simples sont utilisées. Ici, je n'en explique que quelques-unes couramment utilisées.
1.1. Obtenir le premier élément
Contient principalement first()
| firstOrNull()
et first{}
| firstOrNull{}
quatre fonctions
first()
|firstOrNull()
- Fonction : trouver le premier élément d'une chaîne
- Différence : si la chaîne est une chaîne vide, la première lèvera
NoSuchElementException
une exception et la seconde renverranull
exemple:
val str = "kotlin very good"// 如果字符串为空串时,会抛出NoSuchElementException异常
str.first() <=> str[0] <=> str.get(0)// 如果字符串为空串时,会返回nullstr.firstOrNull()
first{}
|firstOrNull{}
- Fonction : Trouver le premier élément égal à un certain caractère
- Différence : aucun élément remplissant la condition n'est trouvé, le premier lèvera
NoSuchElementException
une exception et le second renverranull
exemple:
val str = "kotlin very good"// 如果未查找到满足条件的元素,会抛出NoSuchElementException异常
str.first{ it == 'o' } // 如果未查找到满足条件的元素,会返回nullstr.firstOrNull
{ it == 'o' }
1.2. Obtenir le dernier élément
Il comprend principalement quatre fonctions de first()
, firstOrNull()
et first{}
etfirstOrNull{}
last()
etlastOrNull()
- Fonction : trouver le dernier élément d'une chaîne
- Différence : si la chaîne est une chaîne vide, la première lèvera
NoSuchElementException
une exception et la seconde renverranull
exemple:
val str = "kotlin very good"// 如果字符串为空串时,会抛出NoSuchElementException异常
// 其中 lastIndex 是一个拓展属性,其实现是
length - 1str.last() <==> str.get(lastIndex) <==> str[lastIndex]// 如果字符串为空串时,会返回nullstr.lastOrNull()
last{}
etlastOrNull{}
- Fonction : trouver le dernier élément égal à un certain caractère
- Différence : aucun élément remplissant la condition n'est trouvé, le premier lèvera
NoSuchElementException
une exception et le second renverranull
exemple:
val str = "kotlin very good"// 如果未查找到满足条件的元素,会抛出NoSuchElementException异常
// 其实从源码中我们发现其是对原字符串反转之后再进行遍历查找满足条件的元素。这样遍历的次数就减少了
str.last{ it == 'o' } // 如果未查找到满足条件的元素,会返回nullstr.lastOrNull{ it == 'o' }
1.3. Rechercher des éléments
1.3.2, find{} | findLast{}
fournit en fait deux fonctions d'ordre supérieur pour trouver des éléments find{}
, findLast{}
. Cependant, ses composants internes sont tous des appels firstOrNull()
et lastOrNull()
des fonctions de traitement. Il n'y a pas grand-chose à dire ici.
1.3.2. Trouver l'indice de l'élément correspondant
indexOf()
: recherche le premier indice d'un élément ou d'une chaîne dans la chaîne d'origine.indexLastOf()
: recherche l'indice de la dernière occurrence d'un élément ou d'une chaîne dans la chaîne d'origine.indexOfFirst{}
: mêmeindexOf()
indexOfLast{}
: mêmeindexLastOf()
exemple:
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 sortie est :
114171412
2. Interception de cordes
Si vous avez Java
des bases en programmation dans d'autres langages. Je pense que vous devriez être familiarisé avec l'interception de cordes. Vous pouvez continuer à regarder vers le bas, tout comme une consolidation de l'interception de cordes. Bien entendu, vous pouvez également ignorer directement cette section, car dans Kotlin
, la fonction d'interception de chaîne subString()
consiste à appeler la fonction Java
dans subString()
.
En Kotlin
plus d'appeler subString()
des fonctions, vous pouvez également appeler subSequence()
des fonctions. Les amis qui sont intéressés peuvent aller voir le code source.
2.1 subString()
Interception avec fonction
Examinons subString()
le code source de la fonction
@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)
À partir du code source ci-dessus, nous pouvons voir que la fonction in Kotlin
est utiliséeJava
subString()
dans:
startIndex
Paramètres : l'indice de début de la chaîne interceptéeendIndex
Paramètre : l'indice de fin de la chaîne interceptéerang
Paramètre, fait référence à unIntRang
type, représentant une plage
Exemple:
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 sortie est :
a very good programming languageKotlin is a verKotlin is a very
Avis:
- La différence entre utiliser
subString(startIndex,endIndex)
etsubString(rang)
quand. On peut le voir à partir des résultats ci-dessus combinés avec le code source. - Gardez à l'esprit le cas hors limites de l'indice. c'est
StringIndexOutOfBoundsException
anormal
2.2 subSequence()
Interception avec fonction
En plus d'utiliser la chaîne d'interception Kotlin
expliquée ci-dessus , vous pouvez également utiliser l'interception de fonction.subString()
subSequence()
Jetons un coup d'œil à son implémentation source :
public fun subSequence(startIndex: Int, endIndex: Int): CharSequence
public fun CharSequence.subSequence(range: IntRange): CharSequence = subSequence(range.start, range.endInclusive + 1)
D'après le code source, nous pouvons voir que c'est à peu près la subString()
même chose qu'une fonction, mais il ne fournit pas seulement startIndex
le transfert
Exemple:
val str = "Kotlin is a very good programming language"
println(str.subSequence(0,15))
println(str.subSequence(IntRange(0,15)))
La sortie est :
Kotlin is a verKotlin is a very
3. Remplacement de chaîne
Comme pour la troncature de chaîne ci-dessus, vous pouvez ignorer cette section si vous avez de l'expérience en programmation. Cependant, pour la fonction de remplacement de chaîne, en plus de la fonction ha dans Kotlin
l'implémentation , elle fournit également d'autres fonctions telles que , , , , etc. La signification de ces fonctions sera expliquée avec des exemples ci-dessous.Java
replace()
replaceFirst()
replaceAfter()
replaceBefore()
replaceIndent()
3.1, fonction remplacer()
replace()
La fonction fournit 4 fonctions surchargées. Ils peuvent remplir différentes fonctions
3.1.1、 remplacer(oldChar,newChar,ignoreCase = false)
Fonction : remplace tous les caractères de la chaîne d'origine par de nouveaux caractères. puis renvoie la nouvelle chaîne
oldChar
: Le caractère à remplacernewChar
: Nouveau personnageignoreCase
: s'il faut référencer la fonctionJava
dansreplace()
. La valeur par défaut est la fonctionfalse
prête àJava
l'emploireplace()
exemple:
// 把字符`a`全部替换为`A`
val str = "Kotlin is a very good programming language"
println(str.replace('a','A'))
La sortie est :
Kotlin is A very good progrAmming lAnguAge
3.1.2、 remplacer(ancienneValeur,nouvelleValeur,ignoreCase = faux)
Fonction : remplace tous les caractères de la chaîne d'origine par de nouveaux caractères. puis renvoie la nouvelle chaîne
oldValue
: la chaîne à remplacernewValue
: nouvelle chaîneignoreCase
: s'il faut référencer la fonctionJava
dansreplace()
. La valeur par défaut est la fonctionfalse
prête àJava
l'emploireplace()
exemple:
// 把字符串`Kotlin`替换成字符串`Java`val str = "Kotlin is a very good programming language"
println(str.replace("Kotlin","Java"))
La sortie est :
Java is a very good programming language
3.1.3、 remplacer (regex, remplacement)
Fonction : Faites correspondre la chaîne source selon les règles régulières définies et remplacez les chaînes qui respectent les règles par de nouvelles chaînes.
regex
: expression régulièrereplacement
: nouvelle chaîne
exemple:
// 正则的规则为检测数字,如果为数字则替换成字符串`
kotlin`val str = "1234a kotlin 5678 3 is 4"
println(str.replace(Regex("[0-9]+"),"kotlin"))
La sortie est :
kotlina kotlin kotlin kotlin is kotlin
3.1.4, remplacer (regex : Regex, transformation noinline : (MatchResult) -> CharSequence)
- Fonction : faites correspondre la chaîne source en fonction des règles régulières définies et
transform{}
remplacez les chaînes satisfaisant aux règles par de nouvelles chaînes mappées par des fonctions d'ordre supérieur.regex
: expression régulièretransform
: fonction d'ordre supérieur
exemple:
val str = "1234a kotlin 5678 3 is 4"
val newStr = str.replace(Regex("[0-9]+"),{"abcd "})
La sortie est :
abcd abcd abcd abcd a kotlin abcd abcd abcd abcd abcd is abcd
Vous pouvez voir la différence entre les deux fonctions à partir des deux fonctions ci-dessus. Vous pouvez lire les informations par vous-même pour comprendre les points de connaissance 高阶函数
sur . 正则表达式
Xiaosheng ajoutera du contenu pertinent dans les chapitres suivants...
Après l'explication de la replace()
fonction ci-dessus. Et plusieurs fonctions surchargées sont analysées. Je crois que tout le monde replace()
a une compréhension générale des paramètres de la fonction. Et les fonctions suivantes sont à peu près la même opération. Par conséquent, dans les différentes opérations de fonction suivantes, je n'illustrerai leurs fonctions qu'avec des exemples. L'introduction des paramètres ne sera pas étudiée en détail.
3.2、remplacerPremier()
Fonction : remplacer le premier caractère ou la première chaîne qui remplit la condition par un nouveau caractère ou une nouvelle chaîne
exemple:
val str = "Kotlin is a very good programming language"
println(str.replaceFirst('a','A'))
println(str.replaceFirst( "Kotlin","Java"))
La sortie est :
Kotlin is A very good programming languageJava is a very good programming language
3.3、remplacerAvant()
Fonction : intercepte le premier caractère qui remplit la condition ou la chaîne après la chaîne, y compris le caractère qui remplit la condition ou la chaîne elle-même, et ajoute une nouvelle chaîne devant.
exemple:
val str = "Kotlin is a very good programming language"
println(str.replaceBefore('a',"AA"))
println(str.replaceBefore("Kotlin","Java"))
La sortie est :
AAa very good programming languageJavaKotlin is a very good programming language
3.4、replaceBeforeLast()
Fonction : intercepte le dernier caractère qui remplit la condition ou la chaîne après la chaîne, y compris le caractère qui remplit la condition ou la chaîne elle-même, et ajoute une nouvelle chaîne devant.
exemple:
val str = "Kotlin is a very good programming language"
println(str.replaceBeforeLast('a',"AA"))
println(str.replaceBeforeLast("Kotlin","Java"))
La sortie est :
AAageJavaKotlin is a very good programming language
3.5, remplacerAprès()
Fonction : intercepte le premier caractère qui remplit la condition ou la chaîne devant la chaîne, y compris le caractère qui remplit la condition ou la chaîne elle-même, et ajoute une nouvelle chaîne après.
exemple:
val str = "Kotlin is a very good programming language"
println(str.replaceAfter('a',"AA"))
println(str.replaceAfter("Kotlin","Java"))
La sortie est :
Kotlin is aAAKotlinJava
3.6、replaceAfterLast()
Fonction : intercepte le dernier caractère qui satisfait la condition ou la chaîne avant la chaîne, y compris le caractère ou la chaîne elle-même qui remplit la condition, et ajoute une nouvelle chaîne après.
exemple:
val str = "Kotlin is a very good programming language"
println(str.replaceAfterLast('a',"AA"))
println(str.replaceAfterLast("Kotlin","Java"))
La sortie est :
Kotlin is a very good programming languaAAKotlinJava
Quatrièmement, la segmentation des chaînes
Comme dans la section précédente, en plus des fonctions de Kotlin
l'implémentation , des fonctions sont fournies pour diviser les chaînes. Une fois le fractionnement réussi, une collection de chaînes sera renvoyée pour nos opérations ultérieures.Java
split()
splitToSequence()
4.1、 diviser()
split()
La fonction fournit également 4
une fonction surchargée. Parmi eux, l'utilisation d'une expression régulière comme fractionnement conditionnel en occupe deux. Séparez avec des personnages pour en occuper un. Le fractionnement avec une chaîne en occupe un.
4.1.1. Utiliser des expressions régulières pour diviser
Kotlin
Pour utiliser une expression régulière dans , vous utilisez une classe Regex
et Java
pour utiliser une expression régulière dans , vous utilisez Pattern
une classe. Voici des exemples
exemple:
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 sortie est :
kotlin java Lua JavaScript kotlin java Lua JavaScript
4.1.2, utilisez des caractères ou des chaînes pour diviser
Dans le développement réel du projet, cette méthode est utilisée plus souvent. Cependant, il convient de noter ici que, qu'il soit divisé par caractères ou par chaînes, il s'agit d'un paramètre variable. Autrement dit, le nombre de ses paramètres est indéfini.
exemple:
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 sortie est :
Kotlin is a very good programming languageKotlin is a very good programming language
Voici un exemple de cas de paramètre 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 sortie est :
a b c d e f g h 2 3 4 5
4.2、 splitToSequence()
Cette fonction peut également être divisée par chaîne ou caractère, et son utilisation est la même que la split()
fonction ci-dessus. Pas grand chose à dire ici...
5. Autres
En plus des points expliqués ci-dessus, il existe de nombreux traitements couramment utilisés, tels que la détection si la chaîne est une chaîne vide, si elle l'est, l'obtention de la longueur null
de la chaîne, l'inversion de la chaîne, le comptage, la conversion du tableau de caractères, l'obtention du caractère de l'indice spécifié, etc.
5.1. Obtenir la longueur de la chaîne
Il
Kotlin
existe deux façons d'obtenir la longueur d'une chaîne dans . En fait c'est juste un
- Obtenez la longueur directement avec
length
l'attribut- Obtenez-le avec
count()
une fonction. En fait,count()
la méthode de la fonction renvoie égalementlength
la longueur.
Exemple:
val str = "kotlin very good"// 1. 直接用length属性获取println("str.length => ${str.length}")// 2. 用count()函数获取println("str.count() => ${str.count()}")
La sortie est :
str.length => 16str.count() => 16
Ici, nous regardons count()
le code source de la fonction
/** * Returns the length of this char sequence. * 其实也就是返回了length属性... */
@kotlin.internal.InlineOnly
public inline fun CharSequence.count(): Int
{
return length
}
5.2. Statistiques des caractères répétés
La fonction mentionnée ci-dessus count()
consiste à renvoyer length
la longueur de l'attribut pour obtenir la chaîne. En fait, le code source fournit également une count{}
fonction d'ordre supérieur appelée , qui est utilisée pour compter le nombre de caractères répétés dans une chaîne.
/* 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
}
Exemple:
val str = "kotlin very good"
val count = str.count
{ it == 'o' }
println("count : $count")
La sortie est :
count : 3
5.3, Chaîne de vérification
Dans le développement réel, en particulier dans Android
le développement, il est souvent rencontré lors de la vérification si le contenu de la zone de saisie est une chaîne vide. Dans Kotlin
, comme dans , Java
plusieurs fonctions sont fournies pour gérer cette situation.
Les fonctions suivantes gèrent toutes les chaînes qui sont vides ou vides :
isEmpty()
: Son code source est de juger s'illength
est égal0
, s'il est égal0
, il reviendratrue
, sinon il reviendrafalse
. Ne peut pas être utilisé directement avec des chaînes nullablesisNotEmpty()
length
: Son code source est de juger s'il est supérieur à0
, s'il est supérieur à ,0
returntrue
, sinon returnfalse
. Ne peut pas être utilisé directement avec des chaînes nullablesisNullOrEmpty()
: Son code source est de juger si la chaîne est ou sinull
elle est égale à .length
0
isBlank()
: Son code source est de juger s'il estlength
égal à0
, ou de juger si le nombre d' espaces qu'il contient est égal à celui en courslength
. Ne peut pas être utilisé directement avec des chaînes nullablesisNotBlank()
: Son code source est d'isBlank()
inverser la fonction. Ne peut pas être utilisé directement avec des chaînes nullablesisNotOrBlank()
: Son code source juge si la chaîne estnull
. ou appelerisBlank()
la fonction
Exemple:
val str : String? = "kotlin"
/* 可以看出当str为可空变量的时候,isNullOrEmpty()和isNotOrBlank()可以不做直接调用而不做任何处理 ,而其他的函行 */
str?.isEmpty()
falsestr?.isNotEmpty()
truestr.isNullOrEmpty()
falsestr?.isBlank()
falsestr?.isNotBlank()
truestr.isNullOrBlank() //false
5.4, concaténation de chaînes
Les liens de chaîne Java
ne peuvent être utilisés +
que pour créer un lien, sauf bien StringBuilder、StringBuffer
sûr. En Kotlin
plus d'utiliser des fonctions +
, vous pouvez également utiliser plus()
des fonctions. Il accepte tout type. plus()
la fonction est une fonction surchargée d'opérateur.
Exemple d'explication :
val oldStr = "kotlin"
println(oldStr.plus(" very good"))
println(oldStr + " very good")
La sortie est :
kotlin very goodkotlin very good
5.5, inversion de chaîne
Comme les tableaux, les chaînes peuvent avoir leurs éléments inversés. Utilisez simplement reversed()
la fonction directement.
exemple:
val str = "kotlin"println("字符串反转:${str.reversed()}")
Résultat de sortie :
字符串反转:niltok
5.6. Déterminer le début et la fin d'une chaîne
5.6.1、 commencePar()
Fonction : Pour juger si sa chaîne commence par un certain caractère ou une chaîne.
char
: caractère de départprefix
: chaîne de départignoreCase
: s'il faut appelerJava
cette fonction dans. La valeur par défaut estfalse
startIndex
: la position de départ
exemple:
val str = "kotlin"
println(str.startsWith('k')) // 是否有字符`k`起始
println(str.startsWith("Kot")) // 是否由字符串`kot`起始
println(str.startsWith("lin",3)) // 当起始位置为3时,是否由字符串`lin`起始
La sortie est :
truetruetrue
5.6.2、se termine par()
Fonction : Pour juger si la chaîne se termine par un certain caractère ou une chaîne.
char
: caractère de finsuffix
: chaîne de finignoreCase
: s'il faut appelerJava
cette fonction dans. La valeur par défaut estfalse
exemple:
val str = "kotlin"println(str.endsWith("lin")) // 是否由字符串`lin`结尾
println(str.endsWith('n')) // 是否由字符`n`结尾复制代码
La sortie est :
truetrue
Six, extension Kotlin
6.1. La recherche de caractères est implémentée par défaut
object StringUtil {
fun lettersCount(str: String): Int {
var count = 0
for (char in str) {
if (char.isLetter()) {
count++
}
}
return count
}
}
6.2. Implémentation à l'aide de l'extension kotlin
fun String.lettersCount(): Int {
var count = 0
for (char in this) {
if (char.isLetter()) {
count++
}
}
return count
}
6.3. Appel
val count = "ABC123xyz!@#".lettersCount()
7. Résumé
Dans le développement réel, il existe de nombreuses situations dans lesquelles les chaînes sont traitées et utilisées. En particulier le traitement de vérification, le remplacement, la segmentation et l'interception des chaînes. C'est pourquoi j'ai trié ces points de connaissance. Ces points de connaissance sont très basiques, mais ils sont aussi très couramment utilisés. Si vous avez de l'expérience en programmation, vous devez consolider les connaissances de base des chaînes.