NSString токенизировать в Objective-C

Большое спасибо за ваши идеи и amp; специально BalusC (много для вас). Моим окончательным решением была небольшая мутация, и я хотел бы поделиться с вами всеми.

Поскольку я использую richfaces 3.3.3, это похоже на использование jsf1.2, следовательно, нет

. В обычной ситуации вы должны нажать на ссылку с href, указывающий на внутреннюю ссылку . Я использую много предварительно упакованных компонентов, где не каждый кликабельный элемент является ссылкой . Это может быть любой элемент html. Было очень полезно использовать плагин jAQuery для закладок Ben Alman ( http://benalman.com/projects/jquery-bbq-plugin/ )

Обратите внимание, что onclick I может программно установить значение фрагмента как ключа / значения, а в следующем коде я заменю старое значение новым значением jQuery.bbq.pushState(state,2) (или я мог бы просто добавить за прежнее значение jQuery.bbq.pushState(state)).

В моем случае ws->md->nd - это иерархические данные, в которых достаточно, чтобы один из них и его родители вычислялись на сервере, поэтому я заменяю родительское значение дочерним значением.

  
 
  

В богатых интерфейсах это классный способ вызова методов setter из браузера с параметром. Обратите внимание, что sendURLFragment рассматривается как метод JS с 5 параметрами и значения передаются на сервер (что очень круто).


Сделайте это, когда вы скопируете новый URL-адрес и загрузите страницу.

window.onload = function(){
if(window.location.hash != ""){  
    //Parse the fragment (hash) from a URL, deserializing it into an object            
    var deparamObj = jQuery.deparam.fragment();
    var ws= '', md= '', nd= '', ld= '', ln = '';            
    jQuery.each(deparamObj, function(key, value) {              
        switch(key){
            case 'ws':
                ws = value;
                break;
            case 'md':
                md = value;
                break;
            case 'nd':
                nd = value;
                break;
            case 'ld':
                ld = value;
                break;
            case 'ln':
                ln = value;
                break;
            default:
                break;          
        }

    });
    sendURLFragment(ws,md,nd,ld,ln);
}   };  

144
задан Ned Batchelder 9 November 2008 в 17:28
поделиться

4 ответа

Найденный этим в http://borkware.com/quickies/one?topic=NSString (полезная ссылка):

NSString *string = @"oop:ack:bork:greeble:ponies";
NSArray *chunks = [string componentsSeparatedByString: @":"];

Hope это помогает!

Adam

275
ответ дан Adam Alexander 9 November 2008 в 17:28
поделиться

Если Вы просто хотите разделить строку, используйте -[NSString componentsSeparatedByString:]. Для более сложной токенизации используйте класс NSScanner.

21
ответ дан Chris Hanson 9 November 2008 в 17:28
поделиться

Если Ваши потребности токенизации более сложны, проверяют мою Строку Какао с открытым исходным кодом, маркирующую/анализирующую инструментарий: ParseKit:

http://parsekit.com

Для простого разделения строк с помощью символа разделителя (как ':'), ParseKit определенно был бы излишеством. Но снова, для сложных потребностей токенизации, ParseKit чрезвычайно мощен/гибок.

Также посмотрите документация Токенизации ParseKit .

7
ответ дан Todd Ditchendorf 9 November 2008 в 17:28
поделиться

Все упомянули componentsSeparatedByString:, но можно также использовать CFStringTokenizer (помните, что NSString и CFString являются взаимозаменяемыми), который будет маркировать естественные языки также (как китаец/Японский язык, который не разделяет слова на пробелах).

32
ответ дан Matt Gallagher 10 November 2008 в 03:28
поделиться