Membagi NSString untuk mengakses satu bagian tertentu


142

Saya memiliki string seperti ini: @"10/04/2011"dan saya ingin menyimpan hanya "10" di string lain. Bagaimana saya bisa melakukan itu?


1
Solusi terbaik adalah dengan menggunakan NSDate dan NSDateFormatter. Kredit ekstra dan kode kualitas yang lebih baik jika Anda benar-benar melokalkannya ke sistem untuk menangani perbedaan bulan / hari / bulan.
EricLeaf

@ EricLeaf di mana dalam pertanyaan apakah katanya string adalah tanggal?
JeremyP

Jawaban:


376
NSArray* foo = [@"10/04/2011" componentsSeparatedByString: @"/"];
NSString* firstBit = [foo objectAtIndex: 0];

Pembaruan 7/3/2018:

Sekarang pertanyaannya telah memperoleh tag Swift, saya harus menambahkan cara Swift untuk melakukan ini. Sederhana saja:

let substrings = "10/04/2011".split(separator: "/")
let firstBit = substrings[0]

Meskipun perhatikan bahwa itu memberi Anda array Substring. Jika Anda perlu mengubahnya kembali ke string biasa, gunakanmap

let strings = "10/04/2011".split(separator: "/").map{ String($0) }
let firstBit = strings[0]

atau

let firstBit = String(substrings[0])

1
Menggunakan [foo firstObject]mungkin lebih baik dalam kasus umum karena itu akan menangani array kosong juga.
Bobrovsky

2
@ Dobrovsky dalam kasus umum, akan lebih baik untuk memvalidasi string untuk memastikan itu adalah kencan. Ini hanyalah contoh yang menjawab pertanyaan spesifik. Ini juga lebih umum untuk mendapatkan salah satu dari tiga bagian tanggal.
JeremyP

Meskipun ada banyak suara, saya harus tidak setuju. Pertama, mengapa menurut Anda 10 adalah hari, bukan bulan? Pendekatan salah arah semacam ini adalah mengapa kami memiliki masalah Y2K.
EricLeaf

2
@EricLeaf Pertanyaannya mengatakan "Saya hanya ingin menyimpan 10 dalam sebuah string". Saya bisa memanggil variabel apa saja. Jawabannya benar untuk pertanyaan itu. Bahkan, tidak ada pertanyaan yang mengatakan itu adalah kencan, jadi saya telah mengubah jawabannya.
JeremyP

36

Salah satu dari 2 ini:

NSString *subString = [dateString subStringWithRange:NSMakeRange(0,2)];
NSString *subString = [[dateString componentsSeparatedByString:@"/"] objectAtIndex:0];

Meskipun perlu diingat bahwa kadang-kadang string tanggal tidak diformat dengan benar dan satu hari (atau sebulan dalam hal ini) ditampilkan sebagai 8, bukan 08 sehingga yang pertama mungkin yang terburuk dari 2 solusi.

Yang terakhir harus dimasukkan ke dalam array yang terpisah sehingga Anda benar-benar dapat memeriksa panjang hal yang dikembalikan, sehingga Anda tidak mendapatkan pengecualian yang dilemparkan dalam kasus string tanggal yang rusak atau tidak valid dari sumber apa pun yang Anda miliki.


itu benar, hanya perhatikan bahwa dalam metode subStringWithRange yang kedua "S" tidak boleh "huruf kecil" (substringWithRange) atau Anda akan mendapatkan kesalahan seperti "metode ini tidak ada".
Marcos Reboucas

9

Ini bekerja dengan baik

NSString *dateString = @"10/10/2010";//Date 
NSArray* dateArray = [dateString componentsSeparatedByString: @"/"];
NSString* dayString = [dateArray objectAtIndex: 0];

8

Tujuan-c:

     NSString *day = [@"10/04/2011" componentsSeparatedByString:@"/"][0];

Cepat:

     var day: String = "10/04/2011".componentsSeparatedByString("/")[0]


5

Saya telah memformat solusi bagus yang disediakan oleh JeremyP di atas menjadi fungsi yang dapat digunakan kembali yang lebih umum di bawah ini:

///Return an ARRAY containing the exploded chunk of strings
+(NSArray*)explodeString:(NSString*)stringToBeExploded WithDelimiter:(NSString*)delimiter
{
    return [stringToBeExploded componentsSeparatedByString: delimiter];
}

5
Mengapa tidak hanya menggunakan componentsSeparatedByString secara langsung?
John Gibb

1
karena saya menggunakannya di beberapa proyek, jadi jika ada perubahan, saya hanya perlu mengubah tubuh fungsi wrapper daripada di beberapa tempat. Tetapi jika Anda hanya menggunakannya sekali, jadi ya lebih masuk akal menggunakannya secara langsung Ceria!
Khayrattee Wasseem

3
komponenSeparatedByString belum berubah dalam dua dekade. Apakah Anda membungkus semua panggilan metode Apple jika mereka berubah? Anda harus banyak mengetik.
tooluser

1

Versi Swift 3.0

let arr = yourString.components(separatedBy: "/")
let month = arr[0]
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.