Hanya mengakses mundur
Cara terbaik adalah menggunakan substringToIndex
gabungan endIndex
properti dan advance
fungsi global.
var string1 = "www.stackoverflow.com"
var index1 = advance(string1.endIndex, -4)
var substring1 = string1.substringToIndex(index1)
Mencari senar dimulai dari belakang
Gunakan rangeOfString
dan setel options
ke.BackwardsSearch
var string2 = "www.stackoverflow.com"
var index2 = string2.rangeOfString(".", options: .BackwardsSearch)?.startIndex
var substring2 = string2.substringToIndex(index2!)
Tanpa ekstensi, Swift idiomatik murni
Swift 2.0
advance
sekarang menjadi bagian dari Index
dan disebut advancedBy
. Anda melakukannya seperti:
var string1 = "www.stackoverflow.com"
var index1 = string1.endIndex.advancedBy(-4)
var substring1 = string1.substringToIndex(index1)
Swift 3.0.0
Anda tidak dapat memanggil advancedBy
pada String
karena memiliki unsur ukuran variabel. Anda harus menggunakan index(_, offsetBy:)
.
var string1 = "www.stackoverflow.com"
var index1 = string1.index(string1.endIndex, offsetBy: -4)
var substring1 = string1.substring(to: index1)
Banyak hal telah diubah namanya. Kasus-kasus tersebut ditulis dalam camelCase, startIndex
menjadi lowerBound
.
var string2 = "www.stackoverflow.com"
var index2 = string2.range(of: ".", options: .backwards)?.lowerBound
var substring2 = string2.substring(to: index2!)
Juga, saya tidak akan merekomendasikan buka paksa index2
. Anda dapat menggunakan penjilidan opsional atau map
. Secara pribadi, saya lebih suka menggunakan map
:
var substring3 = index2.map(string2.substring(to:))
Cepat 4
Versi Swift 3 masih valid tetapi sekarang Anda sekarang dapat menggunakan langganan dengan rentang indeks:
let string1 = "www.stackoverflow.com"
let index1 = string1.index(string1.endIndex, offsetBy: -4)
let substring1 = string1[..<index1]
Pendekatan kedua tetap tidak berubah:
let string2 = "www.stackoverflow.com"
let index2 = string2.range(of: ".", options: .backwards)?.lowerBound
let substring3 = index2.map(string2.substring(to:))
string1.endIndex.advancedBy(-4)
berfungsi untuk saya alih-alihadvance
NSString
jelas juga buruk, karena akhirnya kita semua ingin lepas dari kelas Foundation (legacy). Jadi .... lebih gembar-gembor!string1[..<index1]
. Tidak perlustring1.startIndex
.Swift 3, XCode 8
Sejak
advancedBy(Int)
hilang sejakString
metode penggunaan Swift 3index(String.Index, Int)
. LihatString
ekstensi ini dengan substring dan teman-teman:Ekstensi yang DIPERBARUI untuk Swift 4
Pemakaian:
PS Sungguh aneh bahwa pengembang terpaksa berurusan dengan
String.Index
bukannya polosInt
. Mengapa kita harus peduli tentangString
mekanika internal dan tidak hanya memilikisubstring()
metode sederhana ?sumber
encodedOffset
periksa komentar ini dan cara yang benar untuk mencapai stackoverflow.com/questions/34540185/…Saya akan melakukannya menggunakan subskrip (
s[start..<end]
):Cepat 3, 4, 5
sumber
edit / perbarui:
Di Swift 4 atau lebih baru (Xcode 10.0+) Anda dapat menggunakan metode BidirectionalCollection baru lastIndex (dari :)
sumber
Begini cara saya melakukannya. Anda dapat melakukannya dengan cara yang sama, atau menggunakan kode ini untuk mendapatkan ide.
Berikut ekstensi yang saya gunakan:
Kredit albertbori / Ekstensi String Swift Umum
Umumnya saya adalah pendukung kuat ekstensi, terutama untuk kebutuhan seperti manipulasi string, pencarian, dan pemotongan.
sumber
String
memiliki fitur substring bawaan:Jika yang Anda inginkan adalah "membuka indeks pertama karakter", Anda bisa mendapatkan substring menggunakan
find()
fungsi bawaan :Untuk menemukan indeks terakhir , kita dapat menerapkan
findLast()
.DITAMBAHKAN:
Mungkin,
BidirectionalIndexType
versi khususfindLast
lebih cepat:sumber
Anda dapat menggunakan ekstensi ini:
Swift 2.3.0
Cepat 3
Pemakaian:
sumber
Cepat 4:
Anda bisa mengujinya sebagai berikut:
Periksa https://gitlab.com/seriyvolk83/SwiftEx library. Ini berisi ini dan metode bermanfaat lainnya.
sumber
Apakah Anda ingin mendapatkan substring dari sebuah string dari indeks awal hingga indeks terakhir dari salah satu karakternya? Jika demikian, Anda dapat memilih salah satu dari metode Swift 2.0+ berikut.
Metode yang membutuhkan
Foundation
Dapatkan substring yang menyertakan indeks terakhir dari sebuah karakter:
Dapatkan substring yang TIDAK menyertakan indeks terakhir dari sebuah karakter:
Jika Anda perlu mengulangi operasi tersebut, memperluas
String
bisa menjadi solusi yang baik:Metode yang TIDAK diperlukan
Foundation
Dapatkan substring yang menyertakan indeks terakhir dari sebuah karakter:
Dapatkan substring yang TIDAK menyertakan indeks terakhir dari sebuah karakter:
Jika Anda perlu mengulangi operasi tersebut, memperluas
String
bisa menjadi solusi yang baik:sumber
Berikut cara mudah dan singkat untuk mendapatkan substring jika Anda mengetahui indeksnya:
Itu tidak akan merusak aplikasi jika indeks Anda melebihi panjang string:
Kedua contoh sudah siap untuk Swift 3 .
sumber
Satu hal yang menambah suara gemerincing adalah pengulangan
stringVar
:stringVar [ stringVar .index ( stringVar .startIndex, offsetBy: ...)
Di Swift 4
Perpanjangan dapat mengurangi beberapa di antaranya:
Kemudian, penggunaan:
Perlu dicatat bahwa
to
danfrom
adalah tipeSubstring
(atauString.SubSequance
). Mereka tidak mengalokasikan string baru dan lebih efisien untuk pemrosesan.Untuk mendapatkan kembali suatu
String
jenis,Substring
perlu dicor kembali keString
:Di sinilah string akhirnya dialokasikan.
sumber
sumber
Cepat 3
Artikel yang bagus untuk pemahaman, mengapa kita membutuhkan ini
sumber
Saya telah memperpanjang String dengan dua metode substring. Anda dapat memanggil substring dengan rentang dari / ke atau dari / panjang seperti:
sumber
Swift 2.0 Kode di bawah ini diuji pada XCode 7.2. Silakan lihat tangkapan layar terlampir di bagian bawah
sumber
Di Swift 5
Kita membutuhkan
String.Index
bukan nilai Int sederhana untuk mewakili Indeks.Juga ingat, ketika kita mencoba untuk mendapatkan subString dari Swift
String
(tipe nilai), kita sebenarnya harus mengulang denganSequence
protokol, yang mengembalikanString.SubSequence
tipe daripadaString
tipe.Untuk kembali
String
dariString.SubSequence
, gunakanString(subString)
Contoh Seperti Di Bawah Ini:
sumber
Untuk Swift 2.0 , seperti ini:
sumber
Saya telah memodifikasi posting andrewz agar kompatibel dengan Swift 2.0 (dan mungkin Swift 3.0). Menurut pendapat saya, ekstensi ini lebih mudah dipahami dan mirip dengan yang tersedia dalam bahasa lain (seperti PHP).
sumber
Saya juga membuat ekstensi String sederhana untuk Swift 4:
Jadi Anda bisa dengan mudah menyebutnya seperti ini:
sumber
Coba
Int-based
solusi ini :Catatan: Ini hanya latihan. Itu tidak memeriksa batas. Modifikasi sesuai kebutuhan Anda.
sumber
Berikut ini cara sederhana untuk mendapatkan substring di Swift
sumber