Katakanlah saya punya string di sini:
var fullName: String = "First Last"
Saya ingin membagi basis string pada ruang putih dan menetapkan nilai ke variabel masing-masing
var fullNameArr = // something like: fullName.explode(" ")
var firstName: String = fullNameArr[0]
var lastName: String? = fullnameArr[1]
Juga, terkadang pengguna mungkin tidak memiliki nama belakang.
fullName.utf8.split( <utf-8 character code> )
karya juga (ganti.utf8
dengan.utf16
untuk UTF-16). Misalnya, pemisahan+
dapat dilakukan menggunakanfullName.utf8.split(43)
Jawaban:
Cara Swift adalah menggunakan
split
fungsi global , seperti:dengan Swift 2
Dalam Swift 2 penggunaan split menjadi sedikit lebih rumit karena pengenalan tipe CharacterView internal. Ini berarti bahwa String tidak lagi mengadopsi protokol SequenceType atau CollectionType dan Anda harus menggunakan
.characters
properti untuk mengakses representasi tipe CharacterView dari instance String. (Catatan: CharacterView tidak mengadopsi protokol SequenceType dan CollectionType).sumber
split("a:b::c:", {$0 == ":"}, maxSplit: Int.max, allowEmptySlices: false)
.componentsSeparatedByString()
metode lama jika pemisah Anda lebih panjang dari satu karakter. Dan sekeren itu mengatakanlet (firstName, lastName) = split(fullName) {$0 == ' '}
, itu tidak berhasil, sedihnya.split("a,b;c,d") {$0 == "," || $0 == ";"}
atausplit("a,b;c,d") {contains(",;", $0)}
Cukup panggil
componentsSeparatedByString
metode di email AndafullName
Pembaruan untuk Swift 3+
sumber
NSString
(Swift secara otomatis bertukar saat mengimporFoundation
).[String]
) di Xcode 7.2.Metode termudah untuk melakukan ini adalah dengan menggunakan componentsSeparatedBy:
Untuk Swift 2:
Untuk Swift 3:
sumber
.componentsSeparatedByCharactersInSet(.whitespaceAndNewlineCharacterSet())
componentsSeparatedByString
dancomponentsSeparatedByCharactersInSet
Swift Dev. 4.0 (24 Mei 2017)
Fungsi baru
split
di Swift 4 ( Beta ).Keluaran:
Mengakses nilai:
Xcode 8.1 / Swift 3.0.1
Inilah cara beberapa pembatas dengan array.
Keluaran:
sumber
import Foundation
ke kelas tempat Anda menggunakannya. #SavedYouFiveMinuteslet a="a,,b,c"
dan Anda menggunakana.split(separator: ",")
Anda mendapatkan array seperti["a", "b", c"]
secara default. Ini dapat diubah menggunakanomittingEmptySubsequences: false
yang benar secara default.Cepat 4 atau lebih baru
Jika Anda hanya perlu memformat nama orang dengan benar, Anda dapat menggunakan PersonNameComponentsFormatter .
edit / perbarui:
Cepat 5 atau lebih baru
Untuk memisahkan string dengan karakter bukan huruf, kita dapat menggunakan properti Karakter baru
isLetter
:sumber
fullName.split { $0.isWhitespace }.map(String.init)
let words = line.split{ $0.isWhitespace }.map{ String($0)}
Terima kasih @LeoDabus untuk versi Anda (komentar asli saya memiliki kode yang hilang). Saya juga menyarankan untuk memindahkan versi Swift 5 ke atas jawaban.Sebagai alternatif dari jawaban WMios, Anda juga dapat menggunakan
componentsSeparatedByCharactersInSet
, yang dapat berguna jika Anda memiliki lebih banyak pemisah (ruang kosong, koma, dll.).Dengan input spesifik Anda:
Menggunakan beberapa pemisah:
sumber
,
atau;
atau pemisah lainnyaCepat 4
sumber
Masalah spasi putih
Secara umum, orang menemukan kembali masalah ini dan solusi buruk berulang kali. Apakah ini ruang? "" dan bagaimana dengan "\ n", "\ t" atau karakter spasi putih unicode yang belum pernah Anda lihat, sebagian kecil karena itu tidak terlihat. Meskipun Anda bisa lolos
Solusi yang lemah
Jika Anda perlu mengguncang kenyataan menonton video WWDC di string atau tanggal. Singkatnya, hampir selalu lebih baik untuk memungkinkan Apple untuk menyelesaikan tugas biasa semacam ini.
Solusi Kuat: Gunakan NSCharacterSet
Cara untuk melakukan ini dengan benar, IMHO, adalah menggunakan
NSCharacterSet
karena seperti yang dinyatakan sebelumnya spasi putih Anda mungkin tidak seperti yang Anda harapkan dan Apple telah menyediakan set karakter spasi putih. Untuk menjelajahi berbagai rangkaian karakter yang disediakan, periksa dokumentasi pengembang NSCharacterSet Apple dan kemudian, baru kemudian, tambah atau buat rangkaian karakter baru jika tidak sesuai dengan kebutuhan Anda.NSCharacterSet spasi putih
sumber
Di Swift 4.2 dan Xcode 10
Pilihan 1
pilihan 2
Opsi 3
Opsi 4
Oleh Dokumentasi Apple ....
sumber
Swift 4 membuatnya lebih mudah untuk memisahkan karakter, cukup gunakan fungsi pemisahan baru untuk Strings.
Contoh:
let s = "hi, hello" let a = s.split(separator: ",") print(a)
Sekarang Anda punya array dengan 'hai' dan 'halo'.
sumber
Perbarui untuk Swift 5 dan cara paling sederhana
Ini mencetak,
Namun, jika Anda ingin menyaring string kosong,
Keluaran,
Tapi pastikan, Foundation diimpor
sumber
Cepat 3
AAA
,BBB
danCCC
.whitespaces
dengan.whitespacesAndNewlines
sumber
Swift 4, Xcode 10 dan iOS 12 Pembaruan 100% berfungsi
Lihat dokumentasi Apple di sini untuk informasi lebih lanjut.
sumber
Xcode 8.0 / Swift 3
Jauh:
sumber
Saya punya skenario di mana beberapa karakter kontrol dapat hadir dalam string yang ingin saya bagi. Daripada mempertahankan array ini, saya hanya membiarkan Apple menangani bagian itu.
Berikut ini berfungsi dengan Swift 3.0.1 di iOS 10:
sumber
Saya menemukan kasus yang menarik
metode 1
Ketika saya menggunakan perintah ini untuk membagi beberapa simbol dari data yang diambil dari server , ia dapat membelah sambil menguji dalam simulator dan menyinkronkan dengan perangkat uji, tetapi itu tidak akan terpecah di aplikasi publik, dan Ad Hoc
Butuh banyak waktu untuk melacak kesalahan ini, Mungkin terkutuk dari beberapa Versi Swift, atau Versi iOS atau tidak
Ini bukan tentang kode HTML juga, karena saya mencoba untuk stringByRemovingPercentEncoding dan itu masih tidak berfungsi
Selain itu 10/10/2015
di Swift 2.0 metode ini telah diubah menjadi
metode 2
Ketika saya menggunakan perintah ini, itu dapat membagi data yang sama yang memuat dari server dengan benar
Kesimpulannya, saya sangat menyarankan untuk menggunakan metode 2
sumber
Sebagian besar jawaban ini menganggap input berisi spasi - tidak putih ruang, dan satu ruang pada saat itu. Jika Anda dapat dengan aman membuat asumsi itu, maka jawaban yang diterima (dari bennett) cukup elegan dan juga metode yang akan saya gunakan ketika saya bisa.
Ketika kita tidak dapat membuat asumsi itu, solusi yang lebih kuat perlu untuk mencakup perubahan berikut yang sebagian besar jawaban di sini tidak dipertimbangkan:
\n
) dan Windows (\r\n
)Untuk mengatasi kasus-kasus ini, solusi ini menggunakan regex untuk mengonversi semua spasi putih (termasuk karakter baris baru dan Windows) ke satu ruang, trim, lalu bagi dengan satu ruang:
Swift 3:
sumber
Atau tanpa penutupan Anda bisa melakukan ini di Swift 2:
sumber
Langkah-langkah untuk membagi string menjadi array di Swift 4.
Catatan: variableName.components (dipisahkan oleh: "kata kunci split")
sumber
Cepat 4
Keluaran
sumber
Katakanlah Anda memiliki variabel bernama "Hello World" dan jika Anda ingin membaginya dan menyimpannya ke dalam dua variabel yang berbeda, Anda dapat menggunakan seperti ini:
sumber
Xcode 7.2 (7C68)
sumber
Swift 2.2 Penanganan Kesalahan & Kapitalisasi ditambahkan:
sumber
Penanganan string masih menjadi tantangan di Swift dan terus berubah secara signifikan, seperti yang Anda lihat dari jawaban lain. Semoga semuanya tenang dan menjadi lebih sederhana. Ini adalah cara untuk melakukannya dengan Swift versi 3.0 saat ini dengan beberapa karakter pemisah.
Swift 3:
sumber
Saya sedang mencari split longgar , seperti PHP di
explode
mana urutan kosong termasuk dalam array yang dihasilkan, ini bekerja untuk saya:Keluaran:
sumber
Ini memberikan array bagian yang dibagi secara langsung
maka Anda bisa menggunakan seperti ini,
sumber
Hanya
split
jawaban yang benar, berikut perbedaannya untuk lebih dari 2 spasi.sumber
Ini telah Berubah lagi dalam Beta 5. Weee! Sekarang metode di CollectionType
Tua:
Baru:
Catatan Rilis Apel
sumber
Untuk swift 2, XCode 7.1:
sumber
Berikut ini adalah algoritma yang baru saja saya buat, yang akan memisahkan
String
olehCharacter
dari array dan jika ada keinginan untuk menjaga substring dengan karakter yang terpecah, seseorang dapat mengaturswallow
parameter ketrue
.Xcode 7.3 - Swift 2.2:
Contoh:
sumber