Objective C中數字 字串

2021-08-20 14:13:32 字數 4119 閱讀 9603

1. 在c語言中我們討論的所有數字資料型別,int型、float型和long型都是oc語言中的基本資料型別,但他們都不是物件。如果需要儲存基本資料型別(包括char型),可以使用nsnumber類,它會根據這些資料的型別建立物件。以下是數字物件相見的操作方法。

#import int main(int argc, const char * argv) 

return 0;

}

2. 在if語句中,訊息表示式 [intnumber isequaltonumber: mynumber] 中使用了 isequaltonumber:方法比較兩個nsnumber物件的數值。程式會返回乙個bool值,檢視這兩個值是否相等。

可以使用compare方法測試乙個值是否在數值上小於、等於或大於另乙個值。當訊息表示式 [intnumber compare: mynumber] 

中intnumber的值小於mynumber的值時,返回nsorderedascending;如果相等,則返回nsorderedsame;如果第乙個值大於第二個值,則返回nsordereddescending。

注意:不能修改前面建立的nsnumber物件的值。例如,

nsnumber *mynumber = [[nsnumber alloc] initwithint: 50];

...[mynumber initwithint: 1000];

並不能正常執行。

3. 所有的數字物件必須都是新建立的,這意味著必須對nsnumber類呼叫numberwith···方法,或者對alloc方法的結果呼叫initwith···方法。

1> 如果使用numberwithint:方法建立乙個整型數,需要使用intvalue獲取它的值,使用%i作為格式化字串顯示它的值。

2> 如果使用numberwithinteger:方法建立乙個整型數,需要使用integervalue,也可以轉換為long顯示或者使用stringwithformat:將它格式化成字串。使用%li作為格式化字串。

方法numberwithunsignedint:和numberwithunsignedinteger:的使用類似。

最近對oc語言的擴充套件是允許通過@表示式建立數字物件的。

intnumber = @100;

1. nslog函式:

nslog格式字元%@不僅可以顯示nsstring物件,而且可以顯示其他物件。

nsnumber *intnumber = @100;

nslog(@"%@", intnumber);

2. description方法

oc中可以使用格式化字元%@顯示陣列、字典和集合的全部內容。事實上,通過覆蓋繼承的description方法,還可以通過格式字元顯示你自己的類物件。如果不覆蓋方法,nslog僅僅顯示類名和該物件在記憶體中的位址,這是從nsobject類繼承的description方法預設的實現。

description方法的預設實現是返回類名和物件的記憶體位址,這樣的話,使用nslog輸出

oc物件,意義就不是很大,因為我們並不關心物件的記憶體位址,比較關心的是物件內

部的一些成變數的值。因此,會經常重寫description方法,覆蓋description方法的預設

實現比如,重寫fraction的description方法,返回成員變數numberator,denominator的值

- (nsstring *)description
3. 像stringwithformat:這樣的方法允許提供多個引數(stringwithformat:需要的引數是格式化字串和需要格式化的資料)。這些引數使用一系列逗號提供給方法。

下面這種方式是錯誤的:

str = [nsstring stringwithformat:@"123",@"456"];

nslog(@"%@",str);

輸出結果:

123@「456」 不會被輸出;

以上**可以改寫成:

str = [nsstring stringwithformat:@"%@,%@",@"123",@"456"];

nslog(@"%@",str);

輸出結果:

123,456

4. 可變物件與不可變物件

nsstring類處理不可變字元,而可變字元則是用nsmutablestring類處理的。基本的字串操作如下:

#import int main(int argc, const char * argv) 

return 0;

}

宣告:nscomparisonresult compareresult;用於儲存後面執行的字串比較結果。

在使用compare:方法時注意:如果不想進行大小寫敏感的比較,可使用caseinsensitivecompare:方法。在這個例子中,使用caseinsensitivecompare比較字串物件@"string"和@"string"會相等。

一些方法需要指定乙個範圍確定子字串,包括開始索引數和字元數,索引數以0開始,因此,使用數字對指定字串中的前三個字元。nsstring類(和其他的foundation類)的一些方法中,使用了一些特殊的資料型別nsrange建立範圍物件。實際上,它是結構的typedef定義,包含location和length兩個成員,下面是包含這個資料型別的一些基本字串操作:

#import int main(int argc, const char * argv) 

return 0;

}

substringtoindex: 方法建立了乙個子字串,包括首字元到指定的索引數,但不包括這個字元。因為索引數是從0開始的,所以引數3表示從字串中提取字元0、1和2,並返回結果字串物件,對於所有採用索引數作為引數的字串方法,如果提供的索引數對該字串無效,就會獲得range or index out of bounds的出錯訊息。

substringfromindex:方法返回了乙個字串,它從接收者指定的索引字元開始,直到字串的結尾。

表示式

res = [[str1 substringfromindex: 8] substringtoindex: 6];

顯示了如何結合這兩個方法。

要在另乙個字串中查詢乙個字串,可以使用rangeofstring:方法。如果在接收者中找到指定的字串,則返回的範圍是找到的精確位置。然而如果沒有找到這個字串,則返回範圍的location成員被設定為nsnotfound。注意:subrange不是物件變數,而是乙個結構變數(並且程式中的subrange宣告不包括星號,這通常意味著不是在處理乙個物件,不過id型別是乙個例外)。

5.可變字串

nsmutablestring類可以用來建立可以更改字串的字串物件。因為是nsstring類的子類,所以可以使用nsstring類的所有方法。以下是處理程式中可變字串的幾種方式:

#import int main(int argc, const char * argv) 

//直接設定為可變的字串

[mstr setstring: @"this is string a"];

nslog(@"%@", mstr);

//替換一些字元

[mstr replacecharactersinrange:nsmakerange(8, 8) withstring: @"a mutable string"];

nslog(@"%@", mstr);

//查詢和替換

search = @"this is";

replace = @"an example of";

substr = [mstr rangeofstring: search];

if(substr.location != nsnotfound)

//查詢和替換所有的匹配項

search = @"a";

replace = @"x";

substr = [mstr rangeofstring: search];

while(substr.location != nsnotfound)

nslog(@"%@", mstr);

}return 0;

}

查出數字字元字段中非數字字元的記錄

最近,將原來的數字符欄位轉換為數字時,總報錯誤 無效數字。如何找出其中哪些是非數字字元的記錄?比較麻煩的事。下面是用oracle db自帶的函式translate可以找出來的 1.建立測試表 create table testchar item number varchar2 20 2.手工插入測試...

查出數字字元字段中非數字字元的記錄

最近,將原來的數字符欄位轉換為數字時,總報錯誤 無效數字。如何找出其中哪些是非數字字元的記錄?比較麻煩的事。下面是用oracle db自帶的函式translate可以找出來的 1.建立測試表 create table testchar item number varchar2 20 2.手工插入測試...

1132 數字字元統計

time limit 1 sec memory limit 128 mb submit 3906 solved 2078 submit status web board 對於給定的乙個字串,統計其中數字字元出現的次數。字串長度不超過1000.輸入資料有多行,第一行是乙個整數n,表示測試例項的個數,後...