Come verificare con cosa una stringa inizia con (prefisso) o finisce con (suffisso) in Swift


102

Sto cercando di verificare se una stringa Swift inizia o finisce con un determinato valore. Questi metodi non esistono:

var str = "Hello, playground"
str.startsWith("Hello") // error
str.endsWith("ground") // error

Vorrei anche ottenere le stringhe di prefisso e suffisso. Potrei trovare una sottostringa, come viene risposto qui e qui , ma gli intervalli sono un tale dolore in Swift.

C'è un modo più semplice per farlo?

(Mi sono imbattuto nella risposta mentre stavo leggendo la documentazione e poiché una risposta SO non è stata trovata per i miei termini di ricerca, sto aggiungendo qui la mia domanda e risposta.)

Risposte:


204

Aggiornato per Swift 4

Controllare con cosa inizia e finisce una stringa

È possibile utilizzare i metodi hasPrefix(_:)e hasSuffix(_:)per verificare l'uguaglianza con un'altra stringa.

let str = "Hello, playground"

if str.hasPrefix("Hello") { // true
    print("Prefix exists")
}

if str.hasSuffix("ground") { // true
    print("Suffix exists")
}

Recupero delle sottostringhe effettive di prefisso e suffisso

Per ottenere il prefisso effettivo o la sottostringa del suffisso, è possibile utilizzare uno dei seguenti metodi. Consiglio il primo metodo per la sua semplicità. Tutti i metodi usano strcome

let str = "Hello, playground"

Metodo 1: (consigliato) prefix(Int)esuffix(Int)

let prefix = String(str.prefix(5)) // Hello
let suffix = String(str.suffix(6)) // ground

Questo è il metodo migliore secondo me. A differenza dei metodi 2 e 3 di seguito, questo metodo non andrà in crash se gli indici escono dai limiti. Restituirà solo tutti i caratteri nella stringa.

let prefix = String(str.prefix(225)) // Hello, playground
let suffix = String(str.suffix(623)) // Hello, playground

Naturalmente, a volte gli arresti anomali sono buoni perché ti fanno sapere che c'è un problema con il tuo codice. Quindi considera anche il secondo metodo di seguito. Verrà generato un errore se l'indice esce dai limiti.

Metodo 2: prefix(upto:)esuffix(from:)

Gli indici Swift String sono complicati perché devono tenere conto di caratteri speciali (come le emoji). Tuttavia, una volta ottenuto l'indice, è facile ottenere il prefisso o il suffisso. (Vedi la mia altra risposta su String.Index.)

let prefixIndex = str.index(str.startIndex, offsetBy: 5)
let prefix = String(str.prefix(upTo: prefixIndex)) // Hello

let suffixIndex = str.index(str.endIndex, offsetBy: -6)
let suffix = String(str.suffix(from: suffixIndex)) // ground

Se vuoi evitare di uscire dai limiti, puoi creare un indice usando limitedBy(di nuovo, vedi questa risposta ).

Metodo 3: pedici

Poiché String è una raccolta, puoi utilizzare gli indici per ottenere il prefisso e il suffisso.

let prefixIndex = str.index(str.startIndex, offsetBy: 5)
let prefix = String(str[..<prefixIndex]) // Hello

let suffixIndex = str.index(str.endIndex, offsetBy: -6)
let suffix = String(str[suffixIndex...]) // ground

Ulteriori letture


5

Prefisso e uguaglianza dei suffissi

Per verificare se una stringa ha un prefisso o un suffisso di stringa particolare, chiamare i metodi hasPrefix ( :) e hasSuffix ( :) della stringa , entrambi accettano un singolo argomento di tipo String e restituiscono un valore booleano.

Apple Doc

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.