Разделить NSString для доступа к одному конкретному фрагменту

134

У меня есть строка вроде этого: @"10/04/2011", и я хочу сохранить только "10" в другой строке. Как я могу это сделать?

  • 1
    Лучшее решение - использовать NSDate и NSDateFormatter. Дополнительный кредит и более качественный код, если вы фактически локализуете его в системе, чтобы, возможно, справиться с разницей в месяц / день / день / месяц.
  • 0
    @EricLeaf, где в вопросе говорится, что строка является датой?
Теги:
string
nsstring

7 ответов

353
Лучший ответ
NSArray* foo = [@"10/04/2011" componentsSeparatedByString: @"/"];
NSString* firstBit = [foo objectAtIndex: 0];
  • 1
    Использование [foo firstObject] может быть лучше в общем случае, поскольку оно также будет правильно обрабатывать пустой массив.
  • 2
    @Bobrovsky в общем случае, было бы лучше проверить строку, чтобы убедиться, что это дата. Это всего лишь пример, который отвечает на конкретный вопрос. Также более обобщенно получить любую из трех частей даты.
Показать ещё 2 комментария
35

Любой из этих 2:

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

Хотя помните, что иногда строка даты не отформатирована должным образом, а день (или месяц, если на то пошло) отображается как 8, а не 08, поэтому первый из них может быть худшим из двух решений.

Последний должен быть помещен в отдельный массив, чтобы вы могли фактически проверить длину возвращаемой вещи, поэтому вы не получите никаких исключений, возникающих в случае коррумпированной или недопустимой строки даты из любого источника, который у вас есть.

  • 0
    это верно, просто обратите внимание, что в методе subStringWithRange второй «S» не должен быть «строчными» (substringWithRange), иначе вы получите сообщение об ошибке «этот метод не существует».
9

Хорошо работает

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

Objective-c:

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

Swift:

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

Используйте [myString componentsSeparatedByString:@"/"]

5

Я отформатировал отличное решение, предоставленное JeremyP выше, в более общую функцию повторного использования ниже:

///Return an ARRAY containing the exploded chunk of strings
+(NSArray*)explodeString:(NSString*)stringToBeExploded WithDelimiter:(NSString*)delimiter
{
    return [stringToBeExploded componentsSeparatedByString: delimiter];
}
  • 5
    Почему бы просто не использовать компонентSeparatedByString напрямую?
  • 1
    потому что я использую его в нескольких проектах, поэтому, если что-то изменится, мне нужно просто изменить тело функции-обертки, а не в нескольких местах. Но если вы просто используете его один раз, так что да, имеет смысл использовать его напрямую.
Показать ещё 1 комментарий
1

версия Swift 3.0

let arr = yourString.components(separatedBy: "/")
let month = arr[0]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню