Как я могу определить, содержит ли строка знаки препинания в конце? - PullRequest
1 голос
/ 22 апреля 2010

Предположим, у меня есть строка:

"Здравствуйте, мне нравятся ваши туфли # сегодня ...!"

Я маркирую строку пробелами:

return [string componentsSeparatedByString:@" "];

Итак, мой массив содержит:

Hello
I
like
your
shoes
#today...!

Я хочу сосредоточиться на "# сегодня ...!" любое слово, которое имеет # в префиксе, я меняю цвет шрифта.

Как я могу убедиться, что только "#today" изменил цвет шрифта?

Я бы хотел выяснить, имеет ли слово знак препинания в конце, и изменить цвет символов перед знаком препинания.

Ответы [ 5 ]

2 голосов
/ 22 апреля 2010

Я смущен вашим вопросом.Вы пытаетесь обнаружить строку с пунктуацией в конце или знаком # в начале?

В любом случае:

for (NSString *word in [string componentsSeparatedByString:@" "]) {
    if ([word hasPrefix:@"#"])NSLog(@"%@ starts with #",word);
    if ([word hasSuffix:@"!"])NSLog(@"%@ end with !",word);
}
2 голосов
/ 22 апреля 2010

Вы можете сделать что-то вроде:

if ([[NSCharacterSet symbolCharacterSet] characterIsMember:[word characterAtIndex:0]]) NSLog(@"%@", word);

Это для проверки символа в начале строки - для проверки в конце вы должны использовать [word characterAtIndex:([word length] - 1)]

РЕДАКТИРОВАТЬ: ОК, я думаю, я понимаю вопрос сейчас Если вы хотите изменить цвет символов только до установки цвета, вы можете сделать что-то вроде:

NSRange punctCharRange = [word rangeOfCharacterFromSet:[NSCharacterSet punctuationCharacterSet]];
for (int i = 0; i < punctCharRange.location; i++) {
    //change the color of the character
}
2 голосов
/ 22 апреля 2010

Рассмотрите возможность использования RegexKitLite и этот метод:

- (NSRange)rangeOfRegex:(NSString *)regex
                options:(RKLRegexOptions)options
                inRange:(NSRange)range
                capture:(NSInteger)capture
                  error:(NSError **)error;

Регулярное выражение, которое вы хотите, выглядит как @"#\\S+\\b".Это регулярное выражение говорит: «Найдите символ« # », за которым следуют 1 или более непробельных символов, за которыми следует граница слова».

Затем будет возвращен диапазон совпадающего регулярного выражения в строке для совпадения.

1 голос
/ 22 апреля 2010

Следующий код должен смотреть от конца word к началу, пока не найдет символ, который не является буквенно-цифровым, проверьте, нашел ли он такой символ, и если да, удалите что-нибудь после этого символа. (непроверенный код)

NSString *wordWithoutTrailingNonAlphanum;
NSRange firstNonAlphanumCharFromEnd =
        [word rangeOfCharacterFromSet:[NSCharacterSet alphanumericCharacterSet]
                              options:NSBackwardsSearch];
if (firstNonAlphanumCharFromEnd.location != NSNotFound) {
    wordWithoutTrailingNonAlphanum =
            [word substringToIndex:(firstNonAlphanumCharFromEnd.location + 1)];
}
0 голосов
/ 24 апреля 2010

Я попытался разбить все слова, начинающиеся с #, и разбить их на основе NSPunctuationCharacterSet. Это работает, однако я теряю знаки препинания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...