Pertanyaan Saya memiliki NSString seperti ini: "Nama depan Nama belakang". Bagaimana cara mengubahnya menjadi "Firstname L."?


Saya ingin mengubahnya menjadi nama depan dan inisial terakhir.

Terima kasih!


5
2017-07-03 22:18


asal


Jawaban:


NSString* nameStr = @"Firstname Lastname";
NSArray* firstLastStrings = [nameStr componentsSeparatedByString:@" "];
NSString* firstName = [firstLastStrings objectAtIndex:0];
NSString* lastName = [firstLastStrings objectAtIndex:1];
char lastInitialChar = [lastName characterAtIndex:0];
NSString* newNameStr = [NSString stringWithFormat:@"%@ %c.", firstName, lastInitialChar];

Ini bisa jauh lebih ringkas, tetapi saya menginginkan kejelasan untuk OP :) Oleh karena itu semua variabel sementara dan nama var.


14
2017-07-03 22:25



Ini akan melakukannya:

NSArray *components = [fullname componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSString *firstnameAndLastnameInitial = [NSString stringWithFormat:@"%@ %@.", [components objectAtIndex:0], [[components objectAtIndex:1] substringToIndex:1]];

Ini mengasumsikan bahwa nama lengkap adalah turunan NSString dan berisi dua komponen yang dipisahkan oleh spasi, jadi Anda harus memeriksa itu juga.


4
2017-07-03 22:27



Anda dapat menggunakan cuplikan kode ini, gunakan string terpisah pertama componentsSeparatedByString, lalu gabungkan lagi tetapi hanya dapatkan karakter pertama Lastname

NSString *str = @"Firstname Lastname";
NSArray *arr = [str componentsSeparatedByString:@" "];
NSString *newString = [NSString stringWithFormat:@"%@ %@.", [arr objectAtIndex:0], [[arr objectAtIndex:1] substringToIndex:1]];

2
2017-07-03 22:24



Dapatkan array dari bagian-bagian nama secara individual:

NSString *sourceName = ...whatever...;

NSArray *nameComponents =
    [sourceName
        componentsSeparatedByCharactersInSet:
            [NSCharacterSet whitespaceCharacterSet]];

Kemudian, saya kira:

NSString *compactName =
    [NSString stringWithFormat:@"%@ %@.",
        [nameComponents objectAtIndex:0],
        [[nameComponents lastObject] substringToIndex:1]];

Itu akan melewati setiap nama tengah, meskipun jika hanya ada satu nama, seperti mengatakan 'Jeffry' maka akan menghasilkan 'Jeffry J.'. Jika Anda meneruskan string kosong maka itu akan meningkatkan pengecualian ketika Anda mencoba untuk mendapatkannya objectAtIndex:0 karena larik itu akan kosong. Jadi Anda harus memeriksanya [nameComponents count].


0
2017-07-03 22:25