2 votes

Supprimer les caractères de tête et mettre à zéro le martinet

J'ai essayé de supprimer certains caractères de string dans Swift 4, dit : "J'ai

QC00012345 , retour 12345

QC00009876 , retour 9876

QC12345678 , retour 12345678

en supprimant les deux premiers caractères et les zéros qui les précèdent.

J'ai jeté un coup d'œil ici, les gens se contentent d'utiliser dropFirst puis convertir String en Int puis le reconvertir en String .

Existe-t-il une meilleure solution ?

10voto

Leo Dabus Points 122890

Vous pouvez simplement utiliser drop(while:) :

let test = "QC00012345"
let num = test.dropFirst(2).drop { $0 == "0"}

Vous pouvez également créer un ClosedRange<String> et l'utiliser comme prédicat si vous ne voulez pas supprimer les deux premiers caractères manuellement :

let num = test.drop { !("1"..."9" ~= $0) }
print(num)   //  12345

ou vérifier si une chaîne de 1 à 9 ne contient pas le caractère :

let num = test.drop { !"123456789".contains($0) }

modifier/mettre à jour :

Swift 5 ou version ultérieure

Utilisation de la propriété Character isWholeNumber

let num = test.drop { !$0.isWholeNumber || $0 == "0" }

9voto

rmaddy Points 79279

Vous pouvez utiliser une expression régulière et dropFirst :

let str = "QC00009876"
let clean = str.dropFirst(2).replacingOccurrences(of: "^0*", with: "", options: .regularExpression)

L'expression ^0* signifie "zéro ou plusieurs 0 caractères au début de la chaîne".

Ou avec une simple expression régulière :

let str = "QC00009876"
let clean = str.replacingOccurrences(of: "^..0*", with: "", options: .regularExpression)

L'expression ^..0* signifie "deux caractères quelconques suivis de zéro ou plus 0 caractères au début de la chaîne".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X