NSScanner類的基本用法

2021-07-06 11:28:13 字數 3137 閱讀 4833

nsscanner類的基本用法

nsscanner是乙個類,用於在字串中掃瞄指定的字元,尤其是把它們翻譯/轉換為數字和別的字串。可以在建立nsscanner時指定它的string屬性,然後scanner會按照你的要求從頭到尾地掃瞄這個字串的每個字元。

建立乙個scanner

nsscanner是乙個類族,nsscanner是其中公開的一類。通常,可以用scannerwithstring:或localizedscannerwithstring:方法初始化乙個scanner。這兩個方法都返回乙個scanner物件並用你傳遞的字串引數初始化其string屬性。剛建立時scanner物件指向字串的開頭。scanner方法開始掃瞄,比如scanint:,scandouble:,scanstring:intostring:。如果你想要掃瞄多遍,通常需要使用while迴圈。

例如如下**所示:

float afloat;

nsscanner *thescanner = [nsscanner scannerwithstring:astring];

while([thescanner isatend] == no)

另外,還可以通過setcasesensitive:方法設定是否忽略大小寫,預設是忽略。

scanner的使用

掃瞄操作從上次掃瞄的位置開始,並且繼續往後掃瞄直到指定的內容出現為止。

以字串」137 small cases of bananas」為例,在掃瞄完乙個整數之後,scanner的位置將變為3,也即數字後面的空格處。通常,會繼續掃瞄並跳過不關心的字元。

那麼可以用setscanlocation:方法跳過某幾個字元(也可以用這個方法在發生某些錯誤後,重新開始掃瞄字串的某部分)。

如果想跳過某種特殊的字符集中的字元時,可以使用setcharacterstoskipped:方法。

scanner在任何掃瞄操作時會跳過空白字元之後才開始,但是當它找到乙個可以掃瞄的字元時,它會用全部字元去和指定內容匹配。scanner預設情況下會忽略空白字元和換行符。

注意,對於忽略字元,總是大小寫敏感的。例如要忽略所有母音字母,你必須使用」aeiouaeiou」,而不能僅僅是」aeiou」或」aeiou」。

如果想獲得當前位置的某個字串的內容,可以使用scanuptostring:intostring:方法(如果你不想保留這些字元,可以傳遞乙個null給第二個引數)。

例如,以下列字串為例

137 small cases of bananas

下面的**,可以從字串中找出包裝規格(small cases)和包裝數量(137)。

nsstring *bananas = @「137 small cases of bananas」;

nsstring *separatorstring = @「of」;

nsscanner *ascanner = [nsscanner scannerwithstring:bananas];

nsinteger aninteger;

[ascanner scaninteger:&aninteger];

nsstring *container;

[ascanner scanuptostring:separatorstring intostring:&container];

查詢字串separatorstring為」of」關係重大。預設scanner會忽略空白字元,因此在數字137後面的空格被忽略。但是當scanner從空格後面的字元開始時,所有的字元都被加到了輸出字串中,一直到遇到搜尋字串(「of」)。

如果搜尋字串是」of」(前面沒空格),container的第1個值應該是」smallcase 」(後面有個空格);如果搜尋字串是」of」(前面有空格),則container的第1個值是」small case」(後面無空格)。

[ascanner scanstring:separatorstring intostring:null];

nsstring *product;

product = [[ascanner string] substringfromindex:[ascanner scanlocation]];

示例:假設你有如下字串:

product:acme potato peeler;cost:0.98 73

product:chef pierre pasta fork;cost:0.75 19

product:chef pierre colander;cost:1.27 2

以下**演示了讀取產品名稱和**的操作(**簡單地讀作乙個float),跳過」product:」和」cost:」子串,以及分號。注意,因為scanner預設忽略空白字元和換行符,迴圈中沒有指定對它們的處理(尤其是對於讀取末尾的整數而言,並不需要處理額外的空白字元)。

nsstring *string = @「product:acme potato;cost:0.98 73\n\

product:chef pierre pasta fork;cost:0.75 19\n\

product:chef pierre pasta fork;cost:0.75 19\n」;

nscharacterset *semicolonsset;

nsscanner *thescanner;

nsstring *product = @「product」;

nsstring *cost = @「cost」;

nsstring productname;

float productcost;

nsinteger productsold;

semicolonset = [nscharacterset charactersetwithcharactersinstring:@「;」];

thescanner = [nsscanner scannerwithstring:string];

while([thescanner isatend] == no)

}本地化

scanner支援本地化的描述,可以指定語言和方言。nsscanner只在小數點分隔符上使用locale屬性(以nsdecimalseparator為key)。

可以用localizedscannerwithstring:建立指定locale的scanner,或者用setlocale:方法顯示本地指定scanner的local屬性。如果不指定local,scanner假定使用預設local。

NSScanner類的基本用法

nsscanner是乙個類,用於在字串中掃瞄指定的字元,尤其是把它們翻譯 轉換為數字和別的字串。可以在建立nsscaner時指定它的string屬性,然後scanner會按照你的要求從頭到尾地掃瞄這個字串的每個字元。建立乙個scanner nsscanner是乙個類族,nsscanner是其中公開的...

NSScanner類的基本用法

nsscanner是乙個類,用於在字串中掃瞄指定的字元,尤其是把它們翻譯 轉換為數字和別的字串。可以在建立nsscaner時指定它的string屬性,然後scanner會按照你的要求從頭到尾地掃瞄這個字串的每個字元。建立乙個scanner nsscanner是乙個類族,nsscanner是其中公開的...

NSScanner類的基本用法

nsscanner是乙個類,用於在字串中掃瞄指定的字元,尤其是把它們轉換為數字和別的字串。可以在建立nsscaner時指定它的string屬性,然後scanner會按照你的要求從頭到尾地掃瞄這個字串的每個字元。一.建立乙個scanner nsscanner是乙個類族,nsscanner是其中公開的一...